我有散列其值是散列的数组的数组:嵌套在散列阵列的元件的位置
org_array = []
#Create Parents
org_array.push(:org_name => "Parent 1", :org_id => "123ABC", :org_parent_id => nil, :children => [], :status => "created")
org_array.push(:org_name => "Parent 2", :org_id => "456ABC", :org_parent_id => nil, :children => [], :status => "created")
org_array.push(:org_name => "Parent 3", :org_id => "789ABC", :org_parent_id => nil, :children => [], :status => "created")
org_array.push(:org_name => "Parent 4", :org_id => "1011ABC", :org_parent_id => nil, :children => [], :status => "created")
#Create Children
org_array[0][:children].push(:org_name => "Child1", :org_id => "1234ABC", :org_parent_id => "123ABC", :children => [], :status => "created")
org_array[0][:children].push(:org_name => "Child2", :org_id => "5678ABC", :org_parent_id => "123ABC", :children => [], :status => "created")
org_array[0][:children].push(:org_name => "Child3", :org_id => "91011ABC", :org_parent_id => "123ABC", :children => [], :status => "created")
org_array[1][:children].push(:org_name => "Child1", :org_id => "1213ABC", :org_parent_id => "456ABC", :children => [], :status => "created")
org_array[1][:children].push(:org_name => "Child2", :org_id => "1415ABC", :org_parent_id => "456ABC", :children => [], :status => "created")
#Create Grandchildren
org_array[0][:children][0][:children].push(:org_name => "Granchild1", :org_id => "1617ABC", :org_parent_id => "1234ABC", :children => [], :status => "created")
org_array[0][:children][1][:children].push(:org_name => "Granchild2", :org_id => "1617ABC", :org_parent_id => "5678ABC", :children => [], :status => "created")
org_array[0][:children][2][:children].push(:org_name => "Granchild3", :org_id => "1819ABC", :org_parent_id => "91011ABC", :children => [], :status => "created")
org_array[1][:children][0][:children].push(:org_name => "Granchild1", :org_id => "1920ABC", :org_parent_id => "1213ABC", :children => [], :status => "created")
org_array[1][:children][1][:children].push(:org_name => "Granchild2", :org_id => "2122ABC", :org_parent_id => "1415ABC", :children => [], :status => "created")
以下代码返回的对象和键:
def nested_hash_value(obj, key, value)
if obj.respond_to?(:key?) && obj.key?(key) && obj.has_value?(value)
return obj[key]
elsif obj.respond_to?(:each)#checks to see if its an array
r = nil
obj.find{ |*a|r=nested_hash_value(a.last ,key, value)}
r
end
end
nested_hash_value(org_array, :org_id, "2122ABC")
但我希望它返回对象的位置,如org_array[1][:children][1][:children][0]
而不是值2122ABC
。
我想你应该解释为什么/什么你想要这样做。获取对象的id可能会更好,然后能够在以后重新引用它 –
我希望能够找到更新状态键的对象,或者能够将更多组织作为子组织单击到任何位置父母/子女/孙子女组织无论组织架构如何,只要我拥有org_id。 –
重新评论我的回答,我不明白你是如何使用'inject',考虑到它需要一个块和一个可选的初始值作为参数。 –