减少Ruby中的多个变量

mab*_*sif 3 ruby reduce enumerable

AFAIK在减少数组时我们只能输出一次变量,如下所示:

(0..10).reduce(0) do |sum, value|
  sum + value
end
Run Code Online (Sandbox Code Playgroud)

如果我有一个哈希对象数组,我可以减少数组并输出多个变量,例如:

({: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
Run Code Online (Sandbox Code Playgroud)

rkh*_*rov 7

在散列或任何其他合适的对象中聚合多个结果:

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
Run Code Online (Sandbox Code Playgroud)

  • 你也可以切换到`each_with_object`而不必担心块的返回值(但是你必须切换块的参数顺序). (3认同)
  • @muistooshort我真的不明白为什么两个方法之间的参数顺序不同,看起来真的很傻.我总是把这两个混淆. (2认同)