0

ハッシュがあり、すべての値が配列です。したがって、次のようになります。

my_hash = {:key       => ["some string", "some string"],
           :other_key => ["some string"]}

今、このハッシュ内のすべての文字列の数が必要です。

私もです:

my_hash.each_value do |value|
  string_count += value.count
end

しかし、私はエラーが発生します:undefined method '+' for nil:NilClass

しかし、私の値の配列は決して nil ではありません...たとえば、次の場合:

my_hash.each_value do |value|
  puts value.count
end

私は得る:

2
1
2
2
2
etc.

それで、私は何を間違っていますか?事前にThx :)

4

6 に答える 6

4

「注入」はこのためのメソッドです。

string_count = my_hash.inject(0) { |memo, (key, value)| memo += value.count }

http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-inject

于 2012-05-11T11:53:08.910 に答える
3

string_countループの前に初期化する必要があると思います。

string_count = 0
my_hash.each_value do |value|
  string_count += value.count
end
于 2012-05-11T11:40:38.157 に答える
2

string_countですnil

string_count = 0
my_hash.each_value do |value|
  string_count += value.count
end
于 2012-05-11T11:40:53.180 に答える
1

*string_count* は初期化されていますか?
(コードに「string_count = 0」がありますか?)

于 2012-05-11T11:40:55.503 に答える
1

最初に string_count を初期化する必要があります。

于 2012-05-11T11:42:12.937 に答える
0

string_countイテレータの前に初期化すると、この問題は解決します。

string_count = 0

my_hash.each_value do |value|
  string_count += value.count
end

#=> 3
于 2012-05-11T11:45:13.990 に答える