Может ли кто-нибудь показать мне рубиновый способ проверить, существует ли ключ в хеше, а если нет, то он дает значение по умолчанию. Я предполагаю, что есть один лайнер, если только не делать этого, но я не уверен, что использовать.Если ключ не существует, создайте значение по умолчанию
ответ
Если вам не нужно сохранять значения по умолчанию в хэш вы можете использовать Hash#fetch
метод:
hash = {}
hash.fetch(:some_key, 'default-value') # => 'default-value'
p hash
# => {}
Если вам нужно в дополнении сохранить ваше значение по умолчанию каждый раз, когда вы получаете доступ несуществующего ключа и вы «повторно один инициализации хэша вы можете сделать это с помощью Hash#new
с блоком:
hash = Hash.new { |hash, key| hash[key] = 'default-value' }
hash[:a] = 'foo'
p hash[:b]
# => 'default-value'
p hash
# => { :a => 'foo', :b => 'default-value' }
Конструктор класса Hash принять значение по умолчанию, то же будет возвращен, если соответствующий ключ не найден.
h = Hash.new("default")
h.has_key?("jake")
=> false
h["jake"]
=> "default"
h["jake"] = "26"
h.has_key?("jake")
=> true
Если у вас уже есть хэш, вы можете сделать это:
h.fetch(key, "default value")
Или вы использовать тот факт, что несуществующий ключ будет возвращать nil
:
h[key] || "default value"
Чтобы создать хэши со значениями по умолчанию, это зависит от того, что вы хотите сделать точно.
Независимо от ключа и не будут сохранены:
h = Hash.new("foo") h[1] #=> "foo" h #=> {}
В зависимости от ключа и будет храниться:
h = Hash.new { |h, k| h[k] = k * k } h[2] #=> 4 h #=> {2=>4}
Если вы сохраняете значение по умолчанию это может быть ноль, и вам нужно рассчитать его во время хранения:
hash = {}
...
hash.fetch(key) {|k| hash[k] = calc_default()}
Если вы хотите присвоить значение по умолчанию для хэша, если ключ не существует (пока), вы можете использовать ||=
оператора, то есть:
h = {some_key: 'non_default_value'}
value = h[:some_key] ||= 'default_value'
value2 = h[:non_existing_key] ||= 'default_value'
value
будет назначен 'non_default_value'
и value2
будет быть назначен 'default_value'
После этих заданий h
будет иметь non_existing_key
набор для 'default_value'
в:
{:some_key=>"non_default_value", :non_existing_key=>"default_value"}
- 1. Интерполяция по умолчанию, если ключ не существует
- 2. Установка значения по умолчанию в сеансе, если ключ не существует
- 3. Значения массива по умолчанию, если ключ не существует?
- 4. словарь возвращения значения по умолчанию, если ключ не существует
- 5. Выберите значение по умолчанию, если столбец не существует в oracle
- 6. history.back() - как установить значение по умолчанию, если история не существует
- 7. Значение по умолчанию, если оно не существует на карте
- 8. MySql использовать значение по умолчанию, если поиск не существует
- 9. Значение по умолчанию в объекте, если оно не существует
- 10. проверка Linq, если значение существует иное установлено значение по умолчанию
- 11. Создайте ключ, если он не существует во вложенных хешах
- 12. Как добавить ключ: значение к объекту, только если ключ еще не существует? Если ключ уже существует, то изменить значение
- 13. Если ключ реестра не существует
- 14. Поиск, если указанный ключ и значение существует
- 15. Как эхо значение по умолчанию, если значение не установлено. Лезвие
- 16. Сохранять перевод по умолчанию, если отсутствует ключ
- 17. Значение по умолчанию Regex, если не найдено
- 18. inno setup - Создайте ключ ini, даже если он существует
- 19. Findout, если существует средство просмотра по умолчанию
- 20. Добавить ключ и значение в массиве, если оно не существует
- 21. Какое значение будет отображать :: find(), если «ключ» не существует?
- 22. Python словарь возврата запрошенного ключ, если значение не существует
- 23. Нажмите значение для массива, если ключ не существует Mongoose
- 24. Создайте файл, если он еще не существует
- 25. Выбор значения по умолчанию, если запись не существует
- 26. Как найти, если ключ, если не существует, добавить ключ со значением, если существует, обновить значение в Meteor + mongoDB
- 27. Rails Ролевая модель по умолчанию, если не существует
- 28. ngInclude использовать путь по умолчанию, если файл не существует
- 29. Выберите значение из словаря, если ключ существует с использованием LINQ
- 30. если существует хэш-ключ, добавьте новое значение в существующее значение
Использование h [key] || «Значение по умолчанию» не сохраняется, если в нем уже есть ложь, он будет переопределен – Sebastian
Вот почему я перечислил его как одну из нескольких возможностей. Как правило, люди действительно имеют представление о том, какими будут ценности их хэшей, если вы знаете, что не собираетесь сохранять логические значения, это прекрасный подход. –