Mam tablicę Ruby, która zawiera zduplikowane elementy.
array = [1,2,2,1,4,4,5,6,7,8,5,6]
Jak mogę usunąć wszystkie zduplikowane elementy z tej tablicy, zachowując wszystkie unikalne elementy bez użycia pętli for i iteracji?
ruby-on-rails
arrays
ruby
duplicates
Mithun Sasidharan
źródło
źródło
[{how: "are"}, {u:"doing"}, {how: "are"}].uniq => [{:how=>"are"}, {:u=>"doing"}]
.uniq!
ponieważ działa na samym obiekcieMożesz zwrócić skrzyżowanie.
Spowoduje to również usunięcie duplikatów.
źródło
a | a
(union) zrobiłoby tę samą sztuczkę.Możesz usunąć zduplikowane elementy za pomocą metody uniq:
Warto również wiedzieć, że
uniq
zajmuje blok, więc jeśli masz tablicę kluczy:i chcesz wiedzieć, jakie są unikalne pliki, możesz to sprawdzić za pomocą:
źródło
uniq
do tej tablicy bez bloku zwróciłoby tę samą wartość, co w przypadku twojego bloku.To kolejna alternatywa dla kogo to obchodzi.
Możesz także użyć
to_set
metody tablicy, która konwertuje tablicę na zbiór, a elementy zestawu są z definicji unikalne.źródło
to_set
przydzieli 4 obiekty, auniq
przydzieli jeden.Jeśli ktoś szukał sposobu na usunięcie wszystkich wystąpień powtarzających się wartości, zobacz „W jaki sposób mogę skutecznie wyodrębnić powtarzające się elementy w tablicy Ruby? ”.
źródło
a = [1, 2, 2, 3] a.find_all { |x| a.count(x) == 1 } # [1, 3]
Aby zapewnić wgląd:
Co po uruchomieniu powoduje:
Uwaga: te zwróciły złe wyniki:
lri(SHORT_ARRAY) # => [3]
finks(SHORT_ARRAY) # => #<Set: {1, 2, 3}>
santosh_mohanty(SHORT_ARRAY) # => [1, 2, 3, 1]
źródło
Spróbuj użyć operatora XOR, bez korzystania z wbudowanych funkcji:
Dzięki wbudowanym funkcjom:
źródło
.sort!
też wbudowaną funkcją?