Словарь = хэш? - PullRequest
       7

Словарь = хэш?

17 голосов
/ 18 января 2011

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

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

Ответы [ 4 ]

32 голосов
/ 18 января 2011

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

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

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

18 голосов
/ 18 января 2011

В Ruby 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"
7 голосов
/ 18 января 2011

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

3 голосов
/ 11 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...