搜索嵌套散列
问题描述:
这些是红宝石散列的样本响应。搜索嵌套散列
如: -
find abcd1234
应该给我
我能找到,但它不是sufficent
我喜欢这些和列表的......响应继续走下去不同值但结构相同
[
{
"addon_service": {
"id": "-89ab-cdef-0123-456789abcdef",
"name": "heroku-postgresql"
},
"config_vars": [
"FOO",
"BAZ"
],
"created_at": "2012-01-01T12:00:00Z",
"id": "-89ab-cdef-0123-456789abcdef",
"name": "acme-inc-primary-database",
"plan": {
"id": "-89ab-cdef-0123-456789abcdef",
"name": "heroku-postgresql:dev"
},
"app": {
"id"=>"342uo23iu4io23u4oi2u34",
"name"=>"heroku-staging"},
},
"provider_id": "abcd1234",
"updated_at": "2012-01-01T12:00:00Z",
"web_url": "https://postgres.heroku.com/databases/-89ab-cdef-0123-456789abcdef"
} .........
]
任何人都可以知道如何抓住那些?
答
可以遍历所有的数组元素(散),并显示其内容,如果哈希满足您的要求:
element_found = 0
YOUR_DATA.each do |element|
if element["provider_id"].match(/abcd1234/)
element_found += 1
puts "addon_service: #{element['addon_service']['name']}"
puts "app: #{element['app']['name']}"
end
end
if element_found == 0 puts "Sorry match didn't found"
答
由于数组的元素是散列,所以可以通过匹配所需的键来选择合适的元素。
select {|app| app[:provider_id] == "abcd1234"}
您是否知道一旦您选择了该元素将如何处理? 我认为你想要散列中的一些项目,但不是全部。 这可能是这样的:
select {|app| app[:provider_id] == "abcd1234"}.map {|app| app.select {|key, v| [:addon_service, :app].include?(key) } }
+0
它返回空'[]' – Gandalf
未定义的方法'provider_id'我不这么认为我们可以这样做 – Gandalf
所以你的数据实际上是一个包含哈希对象或数组的字符串的数组? –
它的散列阵列某物内部像 [{........ }, {......} , ..........等等.... ] – Gandalf