Книга: Программирование на языке Ruby
8.2.11. Объединение двух хэшей
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!
, которые изменяют вызывающий объект «на месте».
- 8.2.1. Создание нового хэша
- 8.2.2. Указание значения по умолчанию для хэша
- 8.2.3. Доступ к парам ключ-значение и добавление новых пар
- 8.2.4. Удаление пар ключ-значение
- 8.2.5. Обход хэша
- 8.2.6. Инвертирование хэша
- 8.2.7. Поиск ключей и значений в хэше
- 8.2.8. Копирование хэша в массив
- 8.2.9. Выборка пар ключ-значение по заданному критерию
- 8.2.10. Сортировка хэша
- 8.2.11. Объединение двух хэшей
- 8.2.12. Создание хэша из массива
- 8.2.13. Вычисление разности и пересечения хэшей
- 8.2.14. Хэш как разреженная матрица
- 8.2.15. Реализация хэша с повторяющимися ключами
- Forced writes - палка о двух концах
- Управление объединением содержимого узлов
- Материнская плата имеет возможность организации RAID-массивов из двух SATA-дисков. Можно ли подключить к ней только один...
- Аффилиаты: сидя на двух стульях
- Двухмерный график долгосрочных дел, задач и проектов
- Двухмерный график контроля за делегированными задачами
- Двухтоварная выкладка: 1 + 1 = 3
- Объединение документа и преобразования
- Часть VI. Объединение культур devops
- Объединение данных и кода
- КЛАСТЕРИЗАЦИЯ: ОБЪЕДИНЕНИЕ СХОДНЫХ ЗАДАЧ
- 6.2.4. Толкование соглашений, составленных на двух и более языках