Является ли словарь в основном просто хеш-таблицей?
Также бонус: в коде Ruby "Hash.new {0}" что такое "{0}" в конце для?
Является ли словарь в основном просто хеш-таблицей?
Также бонус: в коде Ruby "Hash.new {0}" что такое "{0}" в конце для?
Таблица слов, словарь и карта часто используются синонимично (в контексте структур данных). Хэш-таблица/хэш-карта - это один вид таблицы/словаря/карты.
{0}
- это блок (анонимная функция), который игнорирует свой аргумент и возвращает число 0. Блок, назначенный Hash.new
, вызывается для создания значения по умолчанию, когда ключ не найден в хэш-карте.
т.е. если я сделаю h = Hash.new {0}
, а затем h["key that does not exist"]
, я вернусь 0, а не nil
(который я получил бы без {0}
). Обратите внимание, что в этом случае, когда значение по умолчанию является неизменным и не зависит от ключа, вам не нужно использовать форму блока Hash.new
, вы можете просто сделать Hash.new(0)
, чтобы установить 0 в качестве значения по умолчанию.
В 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"
Словарь просто отображает ключ к значению. Есть много способов добиться этого; хэш-таблица - одна из них.
Словарь - это концептуальный интерфейс. Хэш-таблица представляет собой конкретную реализацию.