Ich habe ein Ruby-Array, das doppelte Elemente enthält.
array = [1,2,2,1,4,4,5,6,7,8,5,6]
Wie kann ich alle doppelten Elemente aus diesem Array entfernen und dabei alle eindeutigen Elemente beibehalten, ohne for-Schleifen und Iteration zu verwenden?
ruby-on-rails
arrays
ruby
duplicates
Mithun Sasidharan
quelle
quelle
[{how: "are"}, {u:"doing"}, {how: "are"}].uniq => [{:how=>"are"}, {:u=>"doing"}]
.uniq!
erledigt die Arbeit am Objekt selbstSie können die Kreuzung zurückgeben.
Dadurch werden auch Duplikate gelöscht.
quelle
a | a
(union) würde den gleichen Trick machen.Sie können die doppelten Elemente mit der uniq-Methode entfernen:
Es kann auch nützlich sein zu wissen, dass
uniq
ein Block benötigt wird. Wenn Sie also ein Array von Schlüsseln haben:und wenn Sie wissen möchten, was die eindeutigen Dateien sind, können Sie dies herausfinden mit:
quelle
uniq
an dieses Array ohne Block denselben Wert zurückgeben wie bei Ihrem Block.Nur eine andere Alternative, wenn es jemanden interessiert.
Sie können auch die
to_set
Methode eines Arrays verwenden, das das Array in eine Menge konvertiert. Per Definition sind Mengenelemente eindeutig.quelle
to_set
werden 4 Objekteuniq
zugewiesen , während eines zugewiesen wird.Wenn jemand nach einer Möglichkeit gesucht hat, alle Instanzen wiederholter Werte zu entfernen, lesen Sie " Wie kann ich wiederholte Elemente in einem Ruby-Array effizient extrahieren? ".
quelle
a = [1, 2, 2, 3] a.find_all { |x| a.count(x) == 1 } # [1, 3]
Nur um einen Einblick zu geben:
Was beim Ausführen zu Folgendem führt:
Hinweis: Diese lieferten schlechte Ergebnisse:
lri(SHORT_ARRAY) # => [3]
finks(SHORT_ARRAY) # => #<Set: {1, 2, 3}>
santosh_mohanty(SHORT_ARRAY) # => [1, 2, 3, 1]
quelle
Versuchen Sie es mit dem XOR-Operator, ohne die integrierten Funktionen zu verwenden:
Mit eingebauten Funktionen:
quelle
.sort!
auch eine eingebaute Funktion?