要素の順序に関係なく、ある配列が別の配列のサブセットであるかどうかを確認するにはどうすればよいですか?
a1 = [3, 6, 4]
a2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
...?
a1 is a subset of a2
要素の順序に関係なく、ある配列が別の配列のサブセットであるかどうかを確認するにはどうすればよいですか?
a1 = [3, 6, 4]
a2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
...?
a1 is a subset of a2
最も簡単なのは次のとおりです。
(a1 - a2).empty?
セットを使用します。その後、使用できます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
すでに持っているデータ構造は完璧です。交差を確認するだけです:
(a1 & a2) == a1
更新:順列について議論しているコメントは興味深く創造的ですが、Ruby の実装者がこの懸念を予期し、結果の順序が の順序であると指定したため、まったく正しくありませんa1
。したがって、これは機能し、今後も機能し続けます。(配列はセットではなく、順序付けられたデータ構造です。配列操作の順序を単に並べ替えることはできません。)
Dave Newtonのカッコよさに対する回答はどちらかというと好きですが、この回答も有効で、Dave の回答と同様に Ruby のコアでもあります。
おそらく高速ではありませんが、かなり読みやすいです
def subset?(a,b)
a.all? {|x| b.include? x}
end