Schnellster / Einzeiliger Weg zum Entfernen von Duplikaten (nach Schlüssel) in Ruby Array?

7

Was ist der schnellste / einzeilige Weg, um Dubletten in einem Array von Objekten zu entfernen, basierend auf einem bestimmten Schlüssel: value oder einem Ergebnis, das von einer Methode zurückgegeben wird?

Zum Beispiel habe ich 20 XML-Element-Knoten, die alle den gleichen Namen haben, aber sie haben unterschiedliche "Text" -Werte, von denen einige Duplikate sind. Ich möchte die Duplikate entfernen, indem ich sage "if element.text == previous_element.text, remove it". Wie mache ich das in Ruby in der kürzesten Menge an Code?

Ich habe gesehen, wie man es für einfache String / Integer-Werte macht, aber nicht für Objekte.

    
Lance Pollard 19.10.2009, 20:29
quelle

3 Antworten

14

Hier ist der Standard-Hashy-Weg. Beachten Sie die Verwendung von ||= operator, was eine bequemere Methode ( a ||= b ) ist, um a = b unless a zu schreiben.

%Vor%

Sie können dies auch in einer einzigen Zeile tun.

Das Skript benötigt O (n) Gleichheitsprüfungen von text Strings. Das ist, was unter O (n) abgedeckt ist, wenn Sie einen Hash sehen.

    
Pavel Shved 19.10.2009, 20:40
quelle
10

Das macht alles:

%Vor%

kurz? Ja.

(Sternchen ist optional; scheint für 1.8.6 erforderlich zu sein.)

Zum Beispiel:

%Vor%

Langweiliger Teil: Hier ist die kleine Testklasse, die ich benutzt habe:

%Vor%     
Peter 19.10.2009 20:48
quelle
4

Verwenden Sie Array#uniq mit einem Block. In Ihrem Fall:

%Vor%

Dies wurde in Ruby 1.9.2 eingeführt. Wenn Sie eine frühere Version verwenden, können Sie backports mit% co_de verwenden %

    
Marc-André Lafortune 10.10.2013 16:12
quelle

Tags und Links