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
uniqtoma un bloque, por lo que si tiene un conjunto de claves:y desea saber cuáles son los archivos únicos, puede averiguarlo con:
fuente
uniqa 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_setmétodo de una matriz que convierte la matriz en un conjunto y, por definición, los elementos del conjunto son únicos.fuente
to_setasignará 4 objetos, mientras queuniqasigna 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?