Reducing multiple variables in Ruby
AFAIK when decreasing the array, we can only output once at the end like so:
(0..10).reduce(0) do |sum, value|
sum + value
end
What if I have an array of hash objects, can I shrink the array and output multiple variables, for example:
({:grade => 100, :sex => 'female'}, {:grade => 90, :sex => 'male'}).reduce(0, 0, 0) do |sum_of_grades, sum_of_male, sum_of_female, value|
sum_of_grades = sum_of_grades + value[:grade]
sum_of_male += 1 if value[:sex] == 'male'
sum_of_female +=1 if value[:sex] == 'female
end
+3
source to share
1 answer
A collection of multiple results in a hash or any other suitable object:
a.reduce({:sum_of_grades => 0, :sum_of_male => 0, :sum_of_female => 0}) do |result, value|
result[:sum_of_grades] += value[:grade]
result[:sum_of_male] += 1 if value[:sex] == 'male'
result[:sum_of_female] += 1 if value[:sex] == 'female'
result
end
+7
source to share