配列の全要素が同じかどうかを比較するにはArray#uniq
が使えます。
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1].uniq.size==1 # => true
[1, 1, 1, 1, 1, 1, 1, 2, 1, 1].uniq.size==1 # => false
%w(street retest setter tester).uniq { |w| w.chars.sort }.size==1 # => true
これをメソッドにしたArray#same?
を考えました。
class Array
def same?(&blk)
self.uniq(&blk).size==1
end
end
uniq
同様、ブロックで同値性の条件を定義できます。
same?
を使うと先の例は次のように簡潔に書けます。
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1].same? # => true
[1, 1, 1, 1, 1, 1, 1, 2, 1, 1].same? # => false
%w(street retest setter tester).same? { |w| w.chars.sort } # => true