2015-09-11 4 views
0

Мне нужно найти максимальное значение из массива, элементы которого представляют собой массив, состоящий из двух элементов, первый из которых представляет собой строку, представляющую время, а второй - целое число. Я хочу максимальные и минимальные значения среди вторых элементов массивов.Как найти максимальное значение из массива массивов?

a = [ 
    ["2015-04-01 20:51:03 +0530", 7], 
    ["2015-04-01 20:51:03 +0530", 11], 
    ["2015-04-01 20:51:03 +0530", 8], 
    ["2015-04-01 20:51:03 +0530", 8], 
    ["2015-04-01 20:51:03 +0530", 8], 
    ["2015-04-01 20:51:03 +0530", 8], 
    ["2015-04-01 20:51:05 +0530", 8], 
    ["2015-04-01 20:51:05 +0530", 20], 
    ["2015-04-01 20:51:05 +0530", 0], 
    ["2015-04-01 20:51:05 +0530", 2], 
    ["2015-04-01 20:51:05 +0530", 1], 
    ["2015-04-01 20:51:05 +0530", 9] 
] 

Любая идея, что это лучший способ сделать это?

+1

Что вы пытаетесь до сих пор? –

ответ

7

Я бы использовал map для сбора элементов из вложенных массивов. Как только это будет сделано, просто используйте min, max или minmax в этой коллекции.

a = [["2015-04-01 20:51:03 +0530", 7], ["2015-04-01 20:51:03 +0530", 11], ["2015-04-01 20:51:03 +0530", 8], ["2015-04-01 20:51:03 +0530", 8], ["2015-04-01 20:51:03 +0530", 8], ["2015-04-01 20:51:03 +0530", 8],["2015-04-01 20:51:05 +0530", 8], ["2015-04-01 20:51:05 +0530", 20], ["2015-04-01 20:51:05 +0530", 0], ["2015-04-01 20:51:05 +0530", 2], ["2015-04-01 20:51:05 +0530", 1], ["2015-04-01 20:51:05 +0530", 9]] 

values = a.map(&:last) 

values.min 
#=> 0 

values.max 
#=> 20 

values.minmax 
#=> [0, 20] 
3

Некоторые другие способы:

a.max_by(&:last) 
# => ["2015-04-01 20:51:05 +0530", 20] 
a.max_by(&:last).last # => 20 
a.min_by(&:last).last # => 0 
Смежные вопросы