Eliminar elementos duplicados de la matriz en Ruby
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 mientras conservo todos los elementos únicos sin usar bucles for e iteración?
6 answers
array = array.uniq
El método uniq elimina todos los elementos duplicados y conserva todos los elementos únicos en la matriz.
Una de las muchas bellezas del lenguaje Rubí.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-10 05:11:00
También puede devolver la intersección.
a = [1,1,2,3]
a & a
Esto también eliminará duplicados.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-19 22:53:29
Puede eliminar los elementos duplicados con el método uniq:
array.uniq # => [1, 2, 4, 5, 6, 7, 8]
Lo que también podría ser útil saber es que el método uniq toma un bloque, por lo que, 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 encontrarlo con:
a.uniq { |f| f[/\d+$/] }.map { |p| p.split(':').last }
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-10 12:03:50
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]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:45
Solo otra alternativa si a alguien le importa.
También puede usar el método to_set
de una matriz que convierte la matriz en un Conjunto y, por definición, los elementos de conjunto son únicos.
[1,2,3,4,5,5,5,6].to_set => [1,2,3,4,5,6]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-06 05:19:27
Pruebe 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-02 08:53:34