13

私はRubyのドキュメントを読み、この問題に関する他の投稿を見てきましたが、私はまだこれについて疑問に思っています:

#counts each number in an array once
array = [1,1,2,5,3,2,5,3,3,3]
numbers = {}
array.each { |num| numbers[num] += 1 }

=> in `block in mode': undefined method `+' for nil:NilClass (NoMethodError)

ハッシュのドキュメントHashでは、 a のデフォルト値は です。そのため、nilこのエラーが発生していると思います。各キー/(値 += 1) を数値配列に挿入するより良い方法はありますか?

4

4 に答える 4

2

injectと のバリアントHash.new(0)

  numbers = [1,1,2,5,3,2,5,3,3,3].inject(Hash.new(0)){|numbers, number| numbers[number] +=1; numbers}
于 2013-11-06T03:55:01.393 に答える
1

ハッシュのデフォルトを使用する以外に、次のことを試すこともできますgroup_by

array = [1,1,2,5,3,2,5,3,3,3]
numbers = Hash[*array.group_by { |i| i }.flat_map { |k, v| [k , v.size] }]

いろいろいじってみると、もっといい方法があるかもしれません。

于 2013-11-06T03:55:30.543 に答える