2016-03-24 6 views
0
A=[[a,3],[a,2],[a,1],[b,1],[b,3]] 

ich das Array durch erstes Element uniq will, aber das Element halten, dieLöschen Dubletten in Multi-Dimension Array

Ergebnis

[[a,3],[b,3]] 

hier das größte zweite Element sein soll, ist mein Code:

A.uniq{|i| i.first} 
=> [[a,1],[b,1]] 
+0

A.uniq {| i | i.first} # => [[a, 1], [b, 1]] – user6107657

+0

Willkommen bei SO. Bitte nehmen Sie sich die Zeit, http://stackoverflow.com/help/how-to-ask zu lesen. Fügen Sie Ihren Code hinzu, indem Sie Ihre Fragen bearbeiten, da der Code in Kommentaren schwer zu lesen ist. – orde

+0

'a' und' b' sind keine Ruby-Objekte (außer sie sind lokale Variablen oder Methoden, die Sie nicht definiert haben). Ich schlage vor, Sie bearbeiten, um sie Zeichenfolgen oder Symbole zu machen. (Ich nahm an, dass sie Saiten in meiner Antwort sind.) Es wäre genauer zu sagen, dass Sie die Elemente von "A" mit ihren ersten Elementen "gruppieren" (statt "uniq") und dann das Element in jeder Gruppe auswählen möchten wessen letztes Element ist am größten. Sie können diese Anweisung dann einfach in Ruby-Code übersetzen. –

Antwort

1

Sie könnten Enumerable#group_by und Enumerable#max_by verwenden.

A=[['a',3],['a',2],['a',1],['b',1],['b',3]] 

A.group_by(&:first).map { |_,v| v.max_by(&:last) } 
    #=> [["a", 3], ["b", 3]] 

Die beiden Schritte:

h = A.group_by(&:first) 
    #=> {"a"=>[["a", 3], ["a", 2], ["a", 1]], "b"=>[["b", 1], ["b", 3]]} 
h.map { |_,v| v.max_by(&:last) } 
    #=> [["a", 3], ["b", 3]] 
+0

Danke das ist genau was ich will, Danke Cary – user6107657

Verwandte Themen