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







All Articles