it-swarm.com.de

Entfernen Sie doppelte Elemente aus dem Array in Ruby

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 Iterationen zu verwenden?

300
array = array.uniq

Die niq-Methode entfernt alle doppelten Elemente und behält alle eindeutigen Elemente im Array bei.

Eine von vielen Schönheiten der Ruby Sprache.

673

Sie können die Kreuzung auch zurückgeben.

a = [1,1,2,3]
a & a

Dadurch werden auch Duplikate gelöscht.

79
jaredsmith

Sie können die doppelten Elemente mit der uniq-Methode entfernen:

array.uniq  # => [1, 2, 4, 5, 6, 7, 8]

Es könnte auch nützlich sein zu wissen, dass die uniq-Methode einen Block benötigt. Wenn Sie also beispielsweise ein Array von Schlüsseln wie folgt haben:

["bucket1:file1", "bucket2:file1", "bucket3:file2", "bucket4:file2"]

wenn Sie wissen möchten, welche Dateien eindeutig sind, finden Sie es heraus mit:

a.uniq { |f| f[/\d+$/] }.map { |p| p.split(':').last }
41
maprihoda

Wenn jemand nach einer Möglichkeit gesucht hat, alle Instanzen wiederholter Werte zu entfernen, lesen Sie diese Frage .

a = [1, 2, 2, 3]
counts = Hash.new(0)
a.each { |v| counts[v] += 1 }
p counts.select { |v, count| count == 1 }.keys # [1, 3]
16
Lri

Nur eine weitere Alternative, wenn es jemanden interessiert.

Sie können auch das to_set-Methode eines Arrays, die das Array in ein Set konvertiert, und per Definition sind Set-Elemente eindeutig.

[1,2,3,4,5,5,5,6].to_set => [1,2,3,4,5,6]
16
Finks