Когда я начал учиться программировать на Ruby, перебор массивов и хешей оказался сложной задачей. Знание разницы между #each, #map, #select и другими важными перечислениями чрезвычайно важно для понимания на раннем этапе написания кода. Вот краткое руководство, которое поможет понять различия между некоторыми полезными перечисляемыми методами Ruby.
#map или #collect
Методы #map и #collect имеют одинаковую функциональность. Согласно официальной документации Ruby, эти методы «возвращают новый массив с результатами выполнения block один раз для каждого элемента в enum».
Вы можете видеть, что исходная переменная равна [1, 2, 3, 4, 5]. Когда вы используете #map в этом массиве, вы передаете каждый элемент в блок, который умножает элемент на 5 и возвращает измененный массив. Однако этот метод не изменяет исходную переменную массива.
# выбрать
Метод #select вернет новый массив всех элементов исходной коллекции, для которых условие возвращает true. Этот метод просматривает данные и сужает коллекцию до требуемых элементов (или тех, которые оцениваются как истинные).
В этом примере массив равен [1, 2, 3, 4, 5], а желаемый набор состоит только из четных чисел. Возвращаемое значение будет [2, 4], поскольку эти элементы четные. Однако этот метод не изменяет исходное значение массива.
#reject
Метод #reject вернет коллекцию для всех элементов, для которых условным условием является ложь.
Например, исходная переменная была массивом, равным [1, 2, 3, 4, 5, 6, 7, 8, 9,10]. Блок кода проверял, был ли каждый элемент нечетным числом. Если это было так, оно было отклонено. Исходный массив не изменился.
#delete_if
Методы #delete удаляют все элементы массива, которые блок считает истинными.
#delete_if похож на #reject. Однако #delete_if изменит исходный массив.
#найти
Метод #find передает каждый элемент в блок и возвращает первый объект, для которого блок является истинным.
#any?
Этот метод вернет истину, если код в блоке оценивается как истина для ЛЮБОГО элемента в коллекции.
Есть масса других полезных методов. Я предлагаю взглянуть на официальную документацию Ruby, чтобы найти еще несколько методов Enumerable: