Есть ли более короткий способ изменить значение ключа?Изменение значения ключа
my_array.each do |x|
if my_hash.key?(x)
my_hash[x] += 1
else
my_hash[x] = 1
end
end
Есть ли более короткий способ изменить значение ключа?Изменение значения ключа
my_array.each do |x|
if my_hash.key?(x)
my_hash[x] += 1
else
my_hash[x] = 1
end
end
немного короче:
my_array.each do |x|
my_hash[x] ||= 0
my_hash[x] += 1
end
, но я не хочу, чтобы оно было 0 по умолчанию. –
Он не будет равен нулю, так как вы добавите 1 сразу после инициализации – ThomasSevestre
Я не хочу, чтобы оно имело значение по умолчанию. –
В вашем конкретном случае это, вероятно, проще всего дать хэш-значение по умолчанию:
my_hash = Hash.new(1)
=> {}
my_hash[:x]
=> 1
my_hash[:y] += 1
=> 2
Обратите внимание, что это имеет смысл только если по умолчанию значение неизменно, в противном случае ссылка будет использоваться всеми ключами.
Как может y быть равным 2? –
Поскольку у него было значение по умолчанию 1. Если вы этого не хотите, инициализируйте хэш с помощью 'Hash.new (0)'. –
Я не хочу, чтобы оно имело значение по умолчанию. Я хочу повысить ценность. –
Вы можете использовать тернарный оператор для написания вашего заявления на одной строке.
my_array.each {|x| my_hash.key?(x) ? my_hash[x].next : my_hash[x] = 1}
Вы также можете использовать следующий методесли вы увеличиваете значение, только 1.
возможно дубликат [Ruby: Что это самый простой способ для обновления значений Hash] (HTTP://stackoverflow.com/questions/5215713/ruby-what-is-the-easiest-method-to-update-hash-values) –
@ Зелёный, что, если ключ не существует, будет ли он работать? –
@AlexanderSupertramp: Проверьте мой ответ, если это то, что вы ищете. в противном случае дайте мне знать, поэтому я могу обновить свой ответ соответственно –