ti-enxame.com

Remover elementos duplicados do array em Ruby

Eu tenho uma matriz Ruby que contém elementos duplicados.

array = [1,2,2,1,4,4,5,6,7,8,5,6]

Como posso remover todos os elementos duplicados desta matriz, mantendo todos os elementos exclusivos sem usar loops e iteração?

294
Mithun Sasidharan
array = array.uniq

O método uniq remove todos os elementos duplicados e retém todos os elementos exclusivos na matriz.

Uma das muitas belezas da linguagem Ruby.

659
Mithun Sasidharan

Você também pode retornar a interseção.

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

Isso também excluirá duplicatas.

79
jaredsmith

Você pode remover os elementos duplicados com o método uniq:

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

O que também pode ser útil saber é que o método uniq recebe um bloco, portanto, por exemplo, se você tiver uma matriz de chaves como esta:

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

e você quer saber quais são os arquivos únicos, você pode descobrir:

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

Se alguém estava procurando uma maneira de remover todas as instâncias de valores repetidos, consulte esta pergunta .

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

Apenas outra alternativa se alguém se importa.

Você também pode usar o método to_set de uma matriz que converte a matriz em um conjunto e, por definição, os elementos de conjunto são exclusivos.

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