2009-08-05 2 views
1

У меня есть массив, который аргументы ради выглядит примерно так:Как объединить подмассивы внутри массива в Ruby?

a = [[1,100], [2,200], [3,300], [2,300]] 

из этих четырех подмассивов, я хотел бы объединить любого где первый элемент является дубликатом. Поэтому в приведенном выше примере я хотел бы объединить 2-ю и 4-ю подматрицы. Тем не менее, оговорка заключается в том, что, когда второй элемент в соответствующих подматрицах отличается от другого, я хотел бы поддерживать более высокое значение.

Итак, я хотел бы видеть этот результат:

a = [[1,100], [3,300], [2,300]] 

Эта маленькая загадка немного выше мои навыки Руби так Обращаюсь к сообществу за помощью. Любое руководство с тем, как справиться с этим, очень ценится.

Благодаря

ответ

5
# Get a hash that maps the first entry of each subarray to the subarray 
# requires 1.8.7+ or active_support (or facets, I think) 
hash = a.group_by { |first, second| first } 
# Take each entry in the hash and select the biggest entry for each unique key 
hash.map {|k,v| v.max } 
+0

работает блестяще. Благодаря :) – aaronrussell

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