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.
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.
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.
Verwenden Sie Array#uniq
mit einem Block. In Ihrem Fall:
Dies wurde in Ruby 1.9.2 eingeführt. Wenn Sie eine frühere Version verwenden, können Sie backports
mit% co_de verwenden %
Tags und Links ruby arrays duplicates