Итак, у меня есть этот рубиновый код, который я взял из Википедии и немного изменил:
@trie = Hash.new()
def build(str)
node = @trie
str.each_char { |ch|
cur = ch
prev_node = node
node = node[cur]
if node == nil
prev_node[cur] = Hash.new()
node = prev_node[cur]
end
}
end
build('dogs')
puts @trie.inspect
Сначала я запустил это на консоли irb, и каждый раз, когда я вывожу node
, он просто продолжает давать мне пустой хэш каждый раз, когда {}
, но когда я фактически вызываю эту функцию, построенную с параметром 'dogs'
string, она действительно работает и выводит {"d"=>{"o"=>{"g"=>{"s"=>{}}}}}
, что совершенно правильно.
Вероятно, это больше вопрос о Ruby, чем реальный вопрос о том, как работает алгоритм. Думаю, у меня нет достаточных знаний Ruby, чтобы расшифровать, что там происходит.
prev_node[cur] = Hash.new
и подумайте, что такоеprev_node[cur]
, но помните, чтоprev_node
сам по себе является хешем с символьным ключом, который указывает на пустой хеш (для одной итерации). - person Dave Newton   schedule 28.01.2012