r = {}
r[0] = [1, 2]
r[2] = [1, 2, 4]
r[4] = [1, 2, 5]
r[6] = [1, 2]
count = 0
r.each do |x|
count += x.length
end
puts count #output is 8 expected value is 10
答案 0 :(得分:5)
each
将接收器哈希转换为数组并迭代它。该迭代的每个元素由两个元素组成的数组:一个键及其对应的值。由于您有四个键值对,因此最多可添加八个。
要获得10
,您可以执行以下操作:
r.each do |x|
count += x.last.length
end
或
r.each do |_, v|
count += v.length
end
或
r.values.flatten.length
答案 1 :(得分:1)
尝试以下方法:
r = {}
r[0] = [1, 2]
r[2] = [1, 2, 4]
r[4] = [1, 2, 5]
r[6] = [1, 2]
count = 0
r.each do |k,v|
count += v.length
end
puts count
# >> 10
为hsh中的每个键调用一次,将键值对作为参数传递。
在你的情况下:
r = {}
r[0] = [1, 2]
r[2] = [1, 2, 4]
r[4] = [1, 2, 5]
r[6] = [1, 2]
count = 0
r.each do |x|
p x.length,x
end
# >> 2
# >> [0, [1, 2]]
# >> 2
# >> [2, [1, 2, 4]]
# >> 2
# >> [4, [1, 2, 5]]
# >> 2
# >> [6, [1, 2]]
您的每个x都是2个数组的大小。现在,当您的哈希r
有4个密钥时,4*2
总计数为8。
答案 2 :(得分:1)
r
是一个哈希,而不是一个数组,所以#each给出了键的值和值。由于块只接受一个参数,因此参数以数组形式给出。
r = {}
r[0] = [1,2,3]
r.each do |x|
p x #=> [0,[1,2,3]]
end
r.each do |key,value|
p key #=> 0
p value #=> [1,2]
end