Подтвердить что ты не робот

Словарь = Хеш?

Является ли словарь в основном просто хеш-таблицей?

Также бонус: в коде Ruby "Hash.new {0}" что такое "{0}" в конце для?

4b9b3361

Ответ 1

Таблица слов, словарь и карта часто используются синонимично (в контексте структур данных). Хэш-таблица/хэш-карта - это один вид таблицы/словаря/карты.

{0} - это блок (анонимная функция), который игнорирует свой аргумент и возвращает число 0. Блок, назначенный Hash.new, вызывается для создания значения по умолчанию, когда ключ не найден в хэш-карте.

т.е. если я сделаю h = Hash.new {0}, а затем h["key that does not exist"], я вернусь 0, а не nil (который я получил бы без {0}). Обратите внимание, что в этом случае, когда значение по умолчанию является неизменным и не зависит от ключа, вам не нужно использовать форму блока Hash.new, вы можете просто сделать Hash.new(0), чтобы установить 0 в качестве значения по умолчанию.

Ответ 2

В Ruby a Hash - это ключ, хранилище значений

h = Hash.new
h['one'] = 1
h['one'] #=> 1
h['two'] #=> nil

{0} - это блок, который будет оцениваться, если вы хотите вызвать ключ, который не существует, он как значение по умолчанию.

h = Hash.new {0}
h['one'] #=> 0
h = Hash.new {|hash,key| "#{key} has Nothing"}
h['one'] #=> "one has Nothing"

Ответ 3

Словарь просто отображает ключ к значению. Есть много способов добиться этого; хэш-таблица - одна из них.

Ответ 4

Словарь - это концептуальный интерфейс. Хэш-таблица представляет собой конкретную реализацию.