对于像这样的数组
s = [[1,2],[4,6],[2,7]]
我如何在一个语句中选择每一行中第二列的最大值和总和
最大值 = 7
总和 = 15
我知道
sum = 0
max = 0
s.each{ |a,b| sum+=b;if max<b then max = b end }
会工作。
second_elements = s.map { |el| el[1] }
sum = second_elements.inject{|sum,x| sum + x }
max = second_elements.max
更清楚地说:
inject{|sum,x| sum + x }
如果数组为空,则返回 nil,因此如果您想为空数组获取 0,请使用inject(0, :+)
transpose 方法非常适合访问“列”:
s = [[1,2],[4,6],[2,7]]
col = s.transpose[1]
p col.max #=> 7
p col.inject(:+) #=> 15
s.max {|a| a[1]}[1] # Max of elements at index 1
s.max {|a| a.last }.last # Max of last elements
# => 7
要找到总和,如果您使用 Ruby 2.4 或更高版本/如果您在 Rails 上
s.sum {|a| a[1]} # Sum of elements at index 1
s.sum(&:last) # Sum of last elements
# => 15
别的
s.inject(0) {|sum, a| sum+= a[1] }
# => 15
s.map{|e| e[1]}.max
给你最大
s.map{|e| e[1]}.reduce(:+)
给你总和。
s = [[1,2],[4,6],[2,7]]
second_max = s.max_by(&:last).last
# => 7
sum = s.reduce(0){|sum,a| sum + a.last}
# => 15