2009-08-05 8 views
1

J'ai un tableau qui, pour des arguments amour ressemble à quelque chose comme ceci:Comment fusionner des sous-tableaux dans un tableau dans Ruby?

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

de ces quatre sous-réseaux, je voudrais fusionner tout où le premier élément est un doublon. Donc, dans l'exemple ci-dessus, je voudrais fusionner les 2e et 4e sous-réseaux. Cependant, la mise en garde est que lorsque le second élément dans les sous-tableaux correspondants est différent, je voudrais maintenir la valeur plus élevée.

Alors, je voudrais voir ce résultat:

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

Ce petit casse-tête est un peu au-dessus de mes compétences Ruby donc me tourne à la communauté de l'aide. Toute orientation avec la façon d'aborder cela est très appréciée.

Merci

Répondre

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

Fonctionne avec brio. Merci :) – aaronrussell