方法
愚直な方法
a = [1, 2]
b = [3, 2, 1]
a.all? { |a_el| b.include?(a_el) } #=> true
c = [1, 4]
c.all? { |c_el| b.include?(c_el) } #=> false
まずまずの方法
配列を集合とみなし、a と b の積集合が a と一致すれば、a は b の部分集合だとみなす。ただし、a に重複する要素がないことが前提。
a = [1, 2]
b = [3, 2, 1]
a & b == a #=> true
c = [1, 4]
c & b == c #=> false
シンプルだが直感的ではない。
よい方法
Set を使えば集合専用のメソッドが使える。
a = [1, 2]
b = [3, 2, 1]
a.to_set.subset?(b.to_set) #=> true
c = [1, 4]
c.to_set.subset?(b.to_set)
シンプルさは前の方法に劣るが、Set#subset? のおかげで可読性が上がる。