3

对于像这样的数组

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 }

会工作。

4

5 回答 5

3
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, :+)

于 2013-07-27T12:21:52.110 回答
2

transpose 方法非常适合访问“列”:

s = [[1,2],[4,6],[2,7]]
col = s.transpose[1]
p col.max #=> 7
p col.inject(:+) #=> 15
于 2013-07-27T12:45:54.140 回答
2
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
于 2013-07-27T15:57:52.147 回答
1

s.map{|e| e[1]}.max给你最大

s.map{|e| e[1]}.reduce(:+)给你总和。

于 2013-07-27T12:18:02.400 回答
0
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
于 2013-07-27T12:35:12.083 回答