2013-07-27 52 views

回答

1

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

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

+0

s.flatten.max返回所有數組的最大。例如在[[3,2]]我想返回2而不是3 – NewMrd

+0

好吧,我更新了它。 –

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

+0

它好!我需要的是:max = s.map {| el | el [1]} .max – NewMrd

+1

@railscard:任何想法,爲什麼我會得到:'NoMethodError:未定義方法'sum'爲[2,6,7]:Array'? –

+0

@sawa,但它可以獲得最大值。 – NewMrd

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 
+1

我喜歡'max_by' :) – tessi

1
Hash[s].values.inject :+ 
# => 15 


Hash[s].values.max 
# => 7