Ruby中的一个数组内的Ruby访问哈希(并添加新哈希)

时间:2015-06-08 21:53:12

标签: arrays ruby hash

我是Ruby的新手,还在学习哈希。我试过在这里寻找其他类似的答案,但无法找到任何完全回答我的问题。

我将一些数据存储在哈希结构中,我将其添加到更新Neo4j数据库( so this data structure is important )的脚本中:

    data = {
        a: [
        {
            label: 'Person',
            title: 'Manager',
            name: 'Mike Waldo'
        },
        {   
            label: 'Person',
            title: 'Developer',
            name: 'Jeff Smith',
        },
        ],

        b: [
        {   
            type: 'ABC',
            source: 'abcde',
            destination: ['Jeff Dudley', 'Mike Wells', 'Vanessa Jones']
        }
        ]
    }

我已经弄清楚如何返回个别值:

data.each{|x, y| puts y[0][:name]}

退货:Mike Waldo

两个问题:

1)如何仅从数组'a:[]'返回'标签','标题'和'名称'?

2)如何在数组'a:[]'下添加和保存新哈希,而不是':b []'?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以返回特定键的值(:a)

data[:a]
# => [{:label=>"Person", :title=>"Manager", :name=>"Mike Waldo"}, {:label=>"Person", :title=>"Developer", :name=>"Jeff Smith"}]

如果你需要节省价值:哈希所以你只需要使用

data[:a] << {:label => "new label", :name => "new name", :titles => "new title"}
# => [{:label=>"Person", :title=>"Manager", :name=>"Mike Waldo"}, {:label=>"Person", :title=>"Developer", :name=>"Jeff Smith"}, {:label=>"new label", :name=>"new name", :titles=>"new title"}]

btw:你的命令(data.each {| x,y | puts y [0] [:name]})只返回拳头散列的名称值,如果你需要所有的名字,你可以使用

data.each do |k, a|
  a.each do |h|
    puts h[:name]
  end
end