Ruby Sinatra遍历数组返回错误:“ TypeError:没有将字符串隐式转换为Integer”?

问题描述 投票:0回答:1

我有以下数组:

 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”

您能否建议我如何输出嵌套数组中的所有值?

arrays ruby sinatra
1个回答
2
投票

您正在尝试在数组中使用[],这旨在通过传递数字参数以通过其索引访问其元素。您正在传递一个字符串,这是从哈希中获取值的方式,这是有问题的。

[您有一个包含哈希的数组数组(带有一个有趣的缩进),因此在这种情况下,您需要首先迭代“ 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"]
© www.soinside.com 2019 - 2024. All rights reserved.