Ruby + =操作抛出错误

时间:2012-05-11 11:38:34

标签: ruby arrays hash count operation

我有一个哈希,所有值都是数组。所以看起来如下:

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.

那么我做错了什么? Thx in Advance:)

6 个答案:

答案 0 :(得分:4)

“inject”就是这样的方法:

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

答案 1 :(得分:3)

我认为您需要在循环之前初始化string_count

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

答案 2 :(得分:2)

string_countnil

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

答案 3 :(得分:1)

* string_count *是否已初始化?
(你的代码中有" string_count = 0")

答案 4 :(得分:1)

您必须先初始化string_count。

答案 5 :(得分:0)

在迭代器之前初始化string_count将解决此问题。

string_count = 0

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

#=> 3