Functional Ruby Idioms
Map, Filter, Reduce
Functional Ruby often transforms a collection through small chained steps.
Map, Filter, Reduce
map_filter_reduce.rb
threshold =
numbers = [1, 2, 3, 4, 5]
filtered = numbers.select { |number| number > threshold }
doubled = filtered.map { |number| number * 2 }
total = doubled.reduce(0) { |sum, number| sum + number }
filtered_text = filtered.join("/")
doubled_text = doubled.join("/")
puts "threshold=#{threshold}"
puts "filtered=#{filtered_text}"
puts "doubled=#{doubled_text}"
puts "total=#{total}"
threshold =
numbers = [1, 2, 3, 4, 5]
filtered = numbers.select { |number| number > threshold }
doubled = filtered.map { |number| number * 2 }
total = doubled.reduce(0) { |sum, number| sum + number }
filtered_text = filtered.join("/")
doubled_text = doubled.join("/")
puts "threshold=#{threshold}"
puts "filtered=#{filtered_text}"
puts "doubled=#{doubled_text}"
puts "total=#{total}"
threshold =
numbers = [1, 2, 3, 4, 5]
filtered = numbers.select { |number| number > threshold }
doubled = filtered.map { |number| number * 2 }
total = doubled.reduce(0) { |sum, number| sum + number }
filtered_text = filtered.join("/")
doubled_text = doubled.join("/")
puts "threshold=#{threshold}"
puts "filtered=#{filtered_text}"
puts "doubled=#{doubled_text}"
puts "total=#{total}"
map filter reduce
`select`, `map`, and `reduce` can express filtering, transforming, and accumulating without manual index tracking.