ruby on rails - array - Eliminar elementos duplicados de la matriz en Ruby
ruby select (6)
Prueba con el operador XOR en Ruby:
a = [3,2,3,2,3,5,6,7].sort!
result = a.reject.with_index do |ele,index|
res = (a[index+1] ^ ele)
res == 0
end
print result
Tengo una matriz de 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 al mismo tiempo que conservo todos los elementos únicos sin utilizar los bucles for y la iteración?
Puedes eliminar los elementos duplicados con el método uniq:
array.uniq # => [1, 2, 4, 5, 6, 7, 8]
Lo que también puede ser útil saber es que el método uniq toma un bloque, por ejemplo, si tiene una matriz de claves como esta:
["bucket1:file1", "bucket2:file1", "bucket3:file2", "bucket4:file2"]
y quieres saber cuáles son los archivos únicos, puedes averiguarlo con:
a.uniq { |f| f[//d+$/] }.map { |p| p.split('':'').last }
Si alguien estaba buscando una manera de eliminar todas las instancias de valores repetidos, vea esta pregunta .
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]
Solo otra alternativa si a alguien le importa.
También puede usar el método to_set
de un array que convierte el Array en un Set y, por definición, los elementos del set son únicos.
[1,2,3,4,5,5,5,6].to_set => [1,2,3,4,5,6]
También puede devolver la intersección.
a = [1,1,2,3]
a & a
Esto también eliminará duplicados.
array = array.uniq
El método uniq elimina todos los elementos duplicados y retiene todos los elementos únicos en la matriz.
Una de las muchas bellezas del lenguaje rubí.