Как объединить вложенные массивы в массиве в Ruby? - PullRequest
1 голос
/ 06 августа 2009

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

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

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

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

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

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

Спасибо

1 Ответ

5 голосов
/ 06 августа 2009
# 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 }
...