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
- なぜこの動作ですか?
- 期待される動作を実現する方法 (長さの合計を取得する)
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
each
受信者ハッシュを配列に変換し、それを反復処理します。その繰り返しの各要素は、キーとそれに対応する値の 2 つの要素の配列で構成されます。キーと値のペアが 4 つあるため、合計すると 8 つになります。
達成10
するには、次のことができます。
r.each do |x|
count += x.last.length
end
また
r.each do |_, v|
count += v.length
end
また
r.values.flatten.length
以下を試してください:
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 のキーごとにブロックを 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 |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 になります。