重複の有無を確認

1ならば全て重複した値

arr.uniq.size

重複数をカウント

参照元:http://takuya-1st.hatenablog.jp/entry/20100103/1262486833

arr = [1,2,3]
arr.size - arr.uniq.size   # => 0  重複無しの場合は0を返す
arr = [1,2,3,1,2]
arr.size - arr.uniq.size   # => 2  2つの文字が重複した状態
arr = [1,2,3]
arr_2 = [1,2,3,1,2]
(arr - arr_2).empty?   #=> true

arr = [1,2,3,4]
(arr - arr_2).empty?   # => false
arr - arr_2          # => 4
(arr_2 - arr).empty?    #=> true


[より効率的な方法]

arr.uniq.select{|i| arr.index(i) != a.rindex(i)}

ハッシュにして返す

class Array
  def count
    k = Hash.new(0)
    self.each{|x| k[x] += 1 }
    return k
  end
end

arr = %w{ foo bar baz foo baz }
items = arr.count
puts items  #=> {"foo"=>2, "bar"=>1, "baz"=>2}

items.each do |k, v|
  puts "#{k} : #{v}"
end
# =>
# foo : 2
# bar : 1
# baz : 2

puts items.keys
# =>
# foo
# bar
# baz