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 dessa matriz, mantendo todos os elementos exclusivos sem usar for-loops e iteração?
ruby-on-rails
arrays
ruby
duplicates
Mithun Sasidharan
fonte
fonte
[{how: "are"}, {u:"doing"}, {how: "are"}].uniq => [{:how=>"are"}, {:u=>"doing"}]
.uniq!
que faz o trabalho no próprio objetoVocê pode retornar o cruzamento.
Isso também excluirá duplicatas.
fonte
a | a
(união) faria o mesmo truque.Você pode remover os elementos duplicados com o método uniq:
O que também pode ser útil saber é que é
uniq
necessário um bloco; portanto, se você tiver um conjunto de chaves:e você deseja saber quais são os arquivos exclusivos, pode descobrir com:
fonte
uniq
para essa matriz sem um bloco retornaria o mesmo valor que o seu bloco.Apenas outra alternativa, se alguém se importa.
Você também pode usar o
to_set
método de uma matriz que converte a matriz em um conjunto e, por definição, os elementos do conjunto são exclusivos.fonte
to_set
alocará 4 objetos, enquantouniq
aloca um.Se alguém estava procurando uma maneira de remover todas as instâncias de valores repetidos, consulte " Como posso extrair eficientemente elementos repetidos em uma matriz Ruby? ".
fonte
a = [1, 2, 2, 3] a.find_all { |x| a.count(x) == 1 } # [1, 3]
Apenas para fornecer algumas dicas:
Que, quando executado, resulta em:
Nota: estes retornaram resultados ruins:
lri(SHORT_ARRAY) # => [3]
finks(SHORT_ARRAY) # => #<Set: {1, 2, 3}>
santosh_mohanty(SHORT_ARRAY) # => [1, 2, 3, 1]
fonte
Tente usar o operador XOR, sem usar funções internas:
Com funções integradas:
fonte
.sort!
também não é uma função embutida?