私は、そのアイテムが元のハッシュの値として現れた回数を含む新しいハッシュのキーとして値を使用したいハッシュを持っています。ハッシュのRuby "count"メソッド
だから私が使用します。
hashA.keys.each do |i|
puts hashA[i]
end
出力例:
0
1
1
2
0
1
1
そして、私は新しいハッシュは以下のようにしたい:
{ 0 => 2, 1 => 4, 2 => 1 }
私は、そのアイテムが元のハッシュの値として現れた回数を含む新しいハッシュのキーとして値を使用したいハッシュを持っています。ハッシュのRuby "count"メソッド
だから私が使用します。
hashA.keys.each do |i|
puts hashA[i]
end
出力例:
0
1
1
2
0
1
1
そして、私は新しいハッシュは以下のようにしたい:
{ 0 => 2, 1 => 4, 2 => 1 }
counts = hashA.values.inject(Hash.new(0)) do |collection, value|
collection[value] +=1
collection
end
ブロック内の意味のある変数名の場合は+1。あなたがAPIを知らないときは忘れてしまいます。 –
TL; DR:hashA.values.inject(Hash.new(0)) { |m, n| m[n] += 1; m }
> hashA = { a: 0, b: 1, c: 1, d: 2, e: 0, f: 1, g: 1 }
=> {:a=>0, :b=>1, :c=>1, :d=>2, :e=>0, :f=>1, :g=>1}
> hashCounts = hashA.values.inject(Hash.new(0)) { |m, n| m[n] += 1; m }
=> {0=>2, 1=>4, 2=>1}
[Ruby配列で同じ文字列要素を数える方法](http://stackoverflow.com/questions/5128200/how-to-count-identical-string-elements-in-a-ruby -アレイ)。この質問の元のデータ構造はハッシュですが、キーを捨てているので、配列である 'hashA.values'を効果的に扱っています。 –
@AndrewGrimm Meh;結局のところ(そして素早く)、はい...しかし、「私は地図があります」という考え方で検索すると、おそらく配列についての情報は検索されません。 –