1. ホーム
  2. ruby

[解決済み] 配列が他の配列の値を含むか?

2022-04-23 05:06:09

質問

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

以下の2つの例では、この質問に答えようとしています。 foods のいずれかの要素が含まれています。 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

解決方法は?

(cheeses & foods).empty?

Marc-André Lafortuneがコメントで言っていた通りです。 & は線形時間で動作するのに対し any? + include? は2次関数になります。大きなデータセットでは、線形時間の方が速いでしょう。小さなデータセットの場合 any? + include? の方が速いかもしれません。 & は新しいArrayを確保するのに対し、別のソリューションはそうせず、単純なネストされたループとして機能し、booleanを返します。