Tengo una matriz Ruby que contiene elementos duplicados.
array = [1,2,2,1,4,4,5,6,7,8,5,6]
¿Cómo puedo eliminar todos los elementos duplicados de esta matriz y al mismo tiempo conservar todos los elementos únicos sin usar for-loops e iteraciones?
ruby-on-rails
arrays
ruby
duplicates
Mithun Sasidharan
fuente
fuente
[{how: "are"}, {u:"doing"}, {how: "are"}].uniq => [{:how=>"are"}, {:u=>"doing"}]
.uniq!
que hace el trabajo sobre el objeto en sí mismoPuedes devolver la intersección.
Esto también eliminará duplicados.
fuente
a | a
(union) haría el mismo truco.Puede eliminar los elementos duplicados con el método uniq:
Lo que también podría ser útil saber es que
uniq
toma un bloque, por lo que si tiene un conjunto de claves:y desea saber cuáles son los archivos únicos, puede averiguarlo con:
fuente
uniq
a esa matriz sin un bloque devolvería el mismo valor que con su bloque.Solo otra alternativa si a alguien le importa.
También puede usar el
to_set
método de una matriz que convierte la matriz en un conjunto y, por definición, los elementos del conjunto son únicos.fuente
to_set
asignará 4 objetos, mientras queuniq
asigna uno.Si alguien buscaba una forma de eliminar todas las instancias de valores repetidos, consulte " ¿Cómo puedo extraer elementos repetidos de manera eficiente en una matriz Ruby? ".
fuente
a = [1, 2, 2, 3] a.find_all { |x| a.count(x) == 1 } # [1, 3]
Solo para proporcionar una idea:
Lo cual, cuando se ejecuta, da como resultado:
Nota: estos arrojaron malos resultados:
lri(SHORT_ARRAY) # => [3]
finks(SHORT_ARRAY) # => #<Set: {1, 2, 3}>
santosh_mohanty(SHORT_ARRAY) # => [1, 2, 3, 1]
fuente
Intente usar el operador XOR, sin usar las funciones integradas:
Con funciones integradas:
fuente
.sort!
también una función incorporada?