2013-07-27 3 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: undefined method 'sum' for [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

Смежные вопросы