8.2.11. Объединение двух хэшей

We use cookies. Read the Privacy and Cookie Policy

8.2.11. Объединение двух хэшей

Иногда бывает нужно объединить хэши. Метод merge получает два хэша и формирует из них третий, перезаписывая обнаружившиеся дубликаты:

dict = {"base"=>"foundation", "pedestal"=>"base"}

added = {"base"=>"non-acid", "salt"=>"NaCl"}

new_dict = diet.merge(added)

# {"base" =>"non-acid", "pedestal" =>"base", "salt"=>"NaCl"}

У метода merge есть синоним update.

Если задан блок, то он может содержать алгоритм устранения коллизий. В нижеприведенном примере, если два ключа совпадают, в объединенном хэше остается меньшее значение (по алфавиту, по числовому значению или в каком-то ином смысле):

dict = {"base"=>"foundation", "pedestal"=>"base"}

added = {"base"=>"non-acid", "salt" =>"NaCl"}

new_dict = diet.merge(added) {|key,old,new| old < new ? old : new }

# {"salt"=>"NaCl", "pedestal"=>"base", "base"=>"foundation"}

Таким образом, при использовании блока результат может получиться не такой, как в случае, когда блок не задан. Имеются также методы merge! и update!, которые изменяют вызывающий объект «на месте».

Данный текст является ознакомительным фрагментом.