配列には別の配列の値が含まれていますか?

概要

配列に 2 番目の配列の要素が含まれているかどうかをテストする最も効率的な方法は何ですか?

以下の 2 つの例は、食品にはチーズの成分が含まれているかという質問に答えようとしています。

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

解決策

(cheeses & foods).empty?

Marc-André Lafortune がコメントで述べたように、線形時間で動作しますが、何かありますか? +含めますか?二次関数になります。データセットが大きい場合、線形時間は速くなります。小規模なデータセットの場合はどうでしょうか? +含めますか? Lee Jarvis の回答で示されているように、これは高速である可能性があります。おそらく、 & は新しい配列を割り当てますが、別のソリューションは割り当てず、ブール値を返す単純な入れ子ループとして機能するためです。