我有一个哈希,所有值都是数组。所以看起来如下:
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:)
答案 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_count
是nil
。
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