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

但是我的值数组永远不会为零......例如当我这样做时:

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

我得到:

2
1
2
2
2
etc.

那么我做错了什么?提前谢谢:)

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_countnil

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 回答