Saya ingin membuat metode yang berbeda untuk kelas yang disebut Multiset .
Saya memiliki semua metode yang diperlukan, tetapi saya tidak yakin bagaimana menulis metode persimpangan, penyatuan, dan subset.
Untuk persimpangan dan gabungan, kode saya mulai seperti ini:
def intersect(var)
x = Multiset.new
end
Berikut ini sebuah contoh:
X = [1, 1, 2, 4]
Y = [1, 2, 2, 2]
maka persimpangan X
dan Y
adalah [1, 2]
.
ruby
union
intersection
subset
pengguna487743
sumber
sumber
Jawaban:
Memanfaatkan fakta bahwa Anda dapat melakukan operasi set pada array dengan melakukan
&
(persimpangan),-
(perbedaan), dan|
(gabungan).Jelas saya tidak mengimplementasikan MultiSet ke spec, tetapi ini harus Anda mulai:
sumber
set
sebagai nama variabel array sederhana; (2) Menggandakan semua yangArray
sudah dilakukan. Jika OP ingin menambahkan fungsionalitas keArray
kelas dengan beberapa metode tambahan, Anda cukup melakukan:class MultiSet < Array def inclusion?(other) Set.new(self).subset?(Set.new(other)) end end
Saya berasumsi
X
danY
apakah array? Jika demikian, ada cara yang sangat sederhana untuk melakukan ini:Sumber
sumber
Multiset < Array
.(x & y) | (y & z) | (x & z)
&=
,,|=
dan-=
jika Anda juga ingin segera menyimpan nilai seperti yang saya lakukan! :)Jika
Multiset
meluas dariArray
kelasPERSATUAN
PERBEDAAN
PERSIMPANGAN
Untuk info lebih lanjut tentang metode baru di Ruby 2.6, Anda dapat memeriksa posting blog ini tentang fitur-fiturnya yang baru
sumber