我有以下数组:
my_tst = [
[
{
"name": "shield",
"version": "8.6.3",
"environment": "XXX-t"
},
{
"name": "bosh-dns",
"version": "1.17.0",
"environment": "XXX-t"
},
{
"name": "nessus_agent",
"version": "1.0.24",
"environment": "XXX-t"
},
{
"name": "node-exporter",
"version": "4.2.0",
"environment": "XXX-t"
},
{
"name": "syslog",
"version": "11.6.1",
"environment": "XXX-t"
}
],
[
{
"name": "shield",
"version": "8.6.3",
"environment": "XXX-q"
},
{
"name": "bosh-dns",
"version": "1.16.0",
"environment": "XXX-q"
},
{
"name": "nessus_agent",
"version": "1.0.24",
"environment": "wob2-q"
},
{
"name": "node-exporter",
"version": "4.2.0",
"environment": "XXX-q"
},
{
"name": "syslog",
"version": "11.6.1",
"environment": "XXX-q"
}
]
]
我正在尝试遍历数组并仅输出name的值。我使用了以下循环:
my_tst["name"].each do |run|
p run
end
上面的循环向我返回一个Eror:“ TypeError:没有将String隐式转换为Integer”
您能否建议我如何输出嵌套数组中的所有值?
您正在尝试在数组中使用[]
,这旨在通过传递数字参数以通过其索引访问其元素。您正在传递一个字符串,这是从哈希中获取值的方式,这是有问题的。
[您有一个包含哈希的数组数组(带有一个有趣的缩进),因此在这种情况下,您需要首先迭代“ main”数组,以便能够在每个数组上获取哈希值。
这是您可以实现的一种方法:
my_tst.each_with_object([]) do |e, arr|
e.each { |f| arr << f[:name] }
end
# ["shield", "bosh-dns", "nessus_agent", "node-exporter", "syslog", "shield", "bosh-dns", "nessus_agent", "node-exporter", "syslog"]