Ruby 2.15
我定义了以下哈希:
test = Hash.new
test["foo"] = {
'id' => 5,
'lobbyist_id' => 19,
'organization_id' => 8
}
如果我这样做
test.each do |t|
print t["id"]
end
我明白了:
TypeError: no implicit conversion of String into Integer
from (irb):1571:in `[]'
如何使用每个循环访问元素?
test.each do |t|
t.each do |t1|
puts t1["id"]
end
end
答案 0 :(得分:2)
使用Hash,首先通过键,然后是值进行迭代。所以让你的块使用你需要的东西。
test.each do |key|
puts key
end
test.each do |key, value|
puts key
puts value
end
还有
test.each_key do |key|
puts key
end
test.each_value do |value|
puts value
end
旁注:id
在test["foo"]
内,所以也许你需要2个循环
直接从哈希中获取id
:
test["foo"]["id"]
test["foo"].each {|k, v| puts "#{k}: #{v}" }
答案 1 :(得分:0)
在您的示例中,我们假设您之前已完成:
test = Hash.new
在您的示例中,变量test
是一个哈希值,foo
是一个键,其值包含键值的哈希值。如果你想定位那些,你需要循环它们
test['foo'].each do |k,v|
puts "my key is #{k}"
puts "it's value is {v}
end
如果你想同时做两件事:
test.each do |k,v|
puts "base hash key #{k}"
puts "base hash value #{v}"
v.each do |kk,vv|
puts "key #{kk}"
puts "value #{vv}"
end
end