Apa cara paling efisien untuk menguji apakah array berisi elemen apa pun dari array kedua?
Dua contoh di bawah ini, mencoba menjawab pertanyaan memang foods
mengandung unsur apa pun dari cheeses
:
cheeses = %w(chedder stilton brie mozzarella feta haloumi reblochon)
foods = %w(pizza feta foods bread biscuits yoghurt bacon)
puts cheeses.collect{|c| foods.include?(c)}.include?(true)
puts (cheeses - foods).size < cheeses.size
any?
: Metode mengembalikan true jika blok pernah mengembalikan nilai selain palsu atau nihil.empty?
: Mengembalikan nilai true jika self tidak mengandung elemen.(cheeses & foods).any?
pertanyaan OP: apakah ada makanan yang mengandung keju? Dalam contohnya, "feta" ada di keduanya, jadi hasilnya harus benar, kan? Jadi mengapa memeriksa.empty?
persimpangan?[false, false, false]
, sementara itu jelas tidak kosong.Bagaimana dengan Enumerable # any?
Skrip benchmark:
Hasil:
sumber
cheeses
menjadi satu set.any?, include?
merupakan yang tercepat, atur paling lambat: gist.github.com/jaredmoody/d2a1e83de2f91fd6865920cd01a8b497Anda dapat memeriksa apakah persimpangan itu kosong.
sumber
sumber
disjoint?
sangat elegan, terutama dibandingkan dengan "any ?, include?". Pertanyaan awal memang bertanya tentang elegan dan efisien..to_set
metode dapat berguna di sinicheeses.to_set.disjoint?(foods.to_set)
sumber