Книга: Программирование на языке Ruby
8.2.9. Выборка пар ключ-значение по заданному критерию
8.2.9. Выборка пар ключ-значение по заданному критерию
К классу Hash
подмешан модуль Enumerable
, поэтому можно обращаться к методам detect(find
), select(find_all
), grep
, min
, max
и reject
(как и для массивов).
Метод detect
(синоним find
) находит одну пару ключ-значение. Он принимает блок (которому передается по одной паре за раз) и возвращает первую пару, для которой вычисление блока дает true
.
names = {"fred"=>"jones","jane"=>"tucker", "joe"=>"tucker","mary"=>"SMITH"}
# Найти tucker.
names.detect {|k,v| v=="tucker" } # ["joe","tucker"]
# Найти имена, записанные прописными буквами.
names.find {|k,v| v==v.upcase } # ["mary", "SMITH"]
Разумеется, объекты в хэше могут быть сколь угодно сложными, как и условие, проверяемое в блоке, но сравнение объектов разных типов может оказаться проблематичным.
Метод select
(синоним find_all
) возвращает все пары, удовлетворяющие условию, а не только первую:
names.select {|k,v| v=="tucker" }
# [["joe", "tucker"], ["jane", "tucker"]]
names.find_all (|k,v| k.count("r")>0}
# [["mary", "SMITH"], ["fred", "jones"]]
- 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. Реализация хэша с повторяющимися ключами
- От исключительной полезности к стратегическому ценообразованию
- Заключение
- Ключевые слова
- Основные параметры ЭЛТ-мониторов
- Отключение питания
- Выбор аппаратного обеспечения для InterBase
- 1.2.1. Ключевые слова и идентификаторы
- 1.3. Правила подключения к компьютеру внешних устройств
- Включение и отключение синхронного вывода
- Распараллеливание на несколько процессоров
- 8.2.5. Обход хэша