Вступ
Бібліотека Ruby включає модуль Enumerable, який надає потужні методи, такі як map, reduce та select. Ці функції дозволяють ефективно перетворювати та маніпулювати даними.
До кінця цієї серії ви навчитеся розбивати задачі обробки даних на чіткі, легкі для налагодження та комбіновані етапи. Це зробить ваш код на Ruby більш ефективним, елегантним і надійним.
Цей посібник розглядає основні операції IRB, включаючи визначення методів, використання map, reduce і select.
На основі: цієї книги від Джей Годсе — Ефективне перетворення та маніпулювання даними в Ruby — тип: irb
Почнемо!
Примітка: якщо ви застрягли, будь ласка, подивіться мій репозиторій.
- Визначення простої функції f(x)
def f(x)
x*x
end
f(x) повертає квадрат числа x.
- Використання MAP для трансформації — завдання
map()полягає в тому, щоб застосувати функцію або блок до кожного елемента масиву і повернути новий масив.
Застосування функції до масиву
out_array = [1,2,3,4,5].map do |n|
f(n)
end
=> [1, 4, 9, 16, 25]
Альтернативно, за допомогою блоку:
out_array = [1,2,3,4,5].map { |n| n*n }
=> [1, 4, 9, 16, 25]
Мапінг з кількома значеннями
out_array = [1,2,3,4,5].map { |n| [n, n*n] }
=> [[1, 1], [2, 4], [3, 9], [4, 16], [5, 25]]
Ланцюжок викликів map
out_array = [1,2,3,4,5].map do |n| n*n
end.map do |s| s+100
end
=> [101, 104, 109, 116, 125]
- Використання REDUCE для накопичення — завдання
reduce()полягає в тому, щоб застосувати функцію до кожного елемента колекції та повернути об'єкт (це може бути масив, одне значення, хеш або що завгодно).
Сума елементів
[1,2,3,4,5].reduce(0,:+)
=> 15
Синтаксис reduce
[1,2,3,4,5].reduce(33) do |memo, elem|
memo.+(elem)
end
=> 48
Обробка побічних ефектів у reduce
[1,2,3,4,5].reduce(33) do |memo, elem|
memo.+(elem)
77.7 # Завжди повертається 77.7
end
=> 77.7
Використання reduce з хешами
[1,2,3,4,5].reduce({}) do |memo, elem|
memo[elem] = elem.to_s
memo
end
=> {1=>"1", 2=>"2", 3=>"3", 4=>"4", 5=>"5"}
Використання reduce для обчислення факторіала
[1,2,3,4,5].reduce(1,:*)
=> 120
Використання reduce для відстеження останніх двох елементів
ini_memo = [nil, nil]
=> [nil, nil]
last_2=(1..10).reduce(ini_memo) do |memo, elem|
ini_memo.push(elem)
ini_memo.shift
ini_memo
end
=> [9, 10]
Використання reduce і select для пошуку непарних чисел серед останніх п'яти в послідовності
sequence = [1,2,3,455,5,6,4,3,45,66,77,54,23,4,55,6,7]
=> [1, 2, 3, 455, 5, 6, 4, 3, 45, 66, 77, 54, 23, 4, 55, 6, 7]
sequence.reduce([nil,nil,nil,nil,nil]) do |memo, n|
memo.push(n)
memo.shift
memo
end.select do |odds_of_last_5|
odds_of_last_5 %2 == 1
end
=> [23, 55, 7]
Цей код використовує reduce, щоб підтримувати останні п'ять елементів послідовності та select для фільтрації непарних чисел з цих п'яти елементів.
reduceітерацією перебирає послідовність, додаючи кожне число в масивmemo, залишаючи тільки останні п'ять чисел.selectфільтрує ці останні п'ять чисел, повертаючи тільки непарні.
Остаточний результат: [23, 55, 7] — це непарні числа з останніх п'яти елементів послідовності.
Висновок
Цей посібник охоплює основні операції IRB, включаючи визначення методів, використання map для трансформацій та використання reduce для накопичення.
Розуміючи ці функції, ви зможете ефективно маніпулювати даними та налагоджувати помилки в Ruby.
Щасливого кодування! 🚀
Подяки та посилання
Книга: Ruby Data Processing — Using Map, Reduce, and Select Джей Годсе (Jay Godse)
Схожі пости
0–1–2–3–4–5–6–7–8–9–10
Перекладено з: Map, Reduce & Select in Ruby