35

要素の順序に関係なく、ある配列が別の配列のサブセットであるかどうかを確認するにはどうすればよいですか?

a1 = [3, 6, 4]
a2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]

...?

a1 is a subset of a2
4

4 に答える 4

67

最も簡単なのは次のとおりです。

(a1 - a2).empty?
于 2012-05-12T21:16:02.870 に答える
39

セットを使用します。その後、使用できますset.subset?。例:

require 'set'

a1 = Set[3,6,4]
a2 = Set[1,2,3,4,5,6,7,8,9]

puts a1.subset?(a2)

出力:

true

オンラインでの動作を確認してください: ideone

于 2012-05-12T21:16:02.977 に答える
30

すでに持っているデータ構造は完璧です。交差を確認するだけです:

(a1 & a2) == a1

更新:順列について議論しているコメントは興味深く創造的ですが、Ruby の実装者がこの懸念を予期し、結果の順序が の順序であると指定したため、まったく正しくありませんa1。したがって、これは機能し、今後も機能し続けます。(配列はセットではなく、順序付けられたデータ構造です。配列操作の順序を単に並べ替えることはできません。)

Dave Newtonのカッコよさに対する回答はどちらかというと好きですが、この回答も有効で、Dave の回答と同様に Ruby のコアでもあります。

于 2012-05-12T21:17:03.743 に答える
3

おそらく高速ではありませんが、かなり読みやすいです

def subset?(a,b)
  a.all? {|x| b.include? x}
end
于 2014-10-03T15:53:12.247 に答える