Saya memiliki array Ruby yang berisi elemen duplikat.
array = [1,2,2,1,4,4,5,6,7,8,5,6]
Bagaimana saya bisa menghapus semua elemen duplikat dari array ini sambil mempertahankan semua elemen unik tanpa menggunakan for-loop dan iterasi?
ruby-on-rails
arrays
ruby
duplicates
Mithun Sasidharan
sumber
sumber
[{how: "are"}, {u:"doing"}, {how: "are"}].uniq => [{:how=>"are"}, {:u=>"doing"}]
.uniq!
ia melakukan pekerjaan pada objek itu sendiriAnda dapat mengembalikan persimpangan.
Ini juga akan menghapus duplikat.
sumber
a | a
(gabungan) akan melakukan trik yang sama.Anda dapat menghapus elemen duplikat dengan metode uniq:
Apa yang mungkin juga berguna untuk diketahui adalah yang
uniq
membutuhkan blok, jadi jika Anda memiliki array kunci:dan Anda ingin tahu apa file unik itu, Anda bisa mengetahuinya dengan:
sumber
uniq
ke array tanpa blok akan mengembalikan nilai yang sama seperti halnya dengan blok Anda.Alternatif lain jika ada yang peduli.
Anda juga dapat menggunakan
to_set
metode array yang mengubah Array menjadi Set dan menurut definisi, elemen set unik.sumber
to_set
akan mengalokasikan 4 objek, sementarauniq
mengalokasikan satu.Jika seseorang mencari cara untuk menghapus semua contoh nilai berulang, lihat " Bagaimana saya bisa mengekstrak elemen berulang secara efisien dalam array Ruby? ".
sumber
a = [1, 2, 2, 3] a.find_all { |x| a.count(x) == 1 } # [1, 3]
Hanya untuk memberikan beberapa wawasan:
Yang mana, saat dijalankan, menghasilkan:
Catatan: ini mengembalikan hasil yang buruk:
lri(SHORT_ARRAY) # => [3]
finks(SHORT_ARRAY) # => #<Set: {1, 2, 3}>
santosh_mohanty(SHORT_ARRAY) # => [1, 2, 3, 1]
sumber
Coba gunakan operator XOR, tanpa menggunakan fungsi bawaan:
Dengan fungsi bawaan:
sumber
.sort!
juga fungsi bawaan?