вычислить значение хеша того же ключа ruby - PullRequest
0 голосов
/ 20 ноября 2018

Я начинаю с базового хэша, в котором ключ является строкой, а значение целое.

hash = {"a"=>2, "b"=>3}

Затем я пытаюсь добиться того, чтобы я хотел несколько раз вставить в этот хэш новый хеш сразные ключи или / и то же:

hash2 = {"c"=>4, "a"=>5}

Результат должен быть

h_result = {"a"=>7, "b"=>3, "c"=>4}

Первое, что нужно сделать, это нажать новый хэш и сохранить дублирующиеся ключи.Я видел этот ответ = Как я могу объединить два хэша без перезаписанных дублирующих ключей в Ruby? , но кажется, что он не работает ..

Тогда я думаю, что я должен сопоставить те же ключи и вычислитьценности.Но снова я не могу найти ответ.

Спасибо, ребята

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Просто используйте Hash#merge с блоком и сообщите Ruby, что делать, когда ключ существует в обоих хешах - в этом примере просто добавьте значение из второго хеша к значению из первого хеша.

hash.merge(hash2) { |key, v1, v2| v1 + v2 }
#=> { "a" => 7, "b" => 3, "c" => 4 }
0 голосов
/ 20 ноября 2018

Если вы просто хотите вычислить равные ключи в хэше, вам нужен метод merge в классе Hash.

https://ruby -doc.org / core-2.2.1 / Hash.html # method-i-merge

Возвращает новый хеш, содержащий содержимое other_hash и содержимое hsh.Если блок не указан, значением для записей с дублирующимися ключами будет значение other_hash.В противном случае значение для каждого дублированного ключа определяется путем вызова блока с ключом, его значение в hsh и его значение в other_hash.

Когда вы передаете блок методу merge, он дасти старое значение, и новое значение, и вы можете выполнять свои вычисления там.

Например:

hash  = {"a"=>2, "b"=>3}
hash2 = {"c"=>4, "a"=>5}

result = hash.merge(hash2) { |key, old_val, new_val| old_val + new_val }

p result #=> {"a"=>7, "b"=>3, "c"=>4}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...