我已经完成了perl很长一段时间,因此这让我感到困惑不已ruby。我下面收集来自不同地方的数据,并希望把以下格式:哈希阵列(autovivification ??)
{
:"user_100" => {
:user_policy => [
"userpolicy_100",
"userpolicy_200"
],
:group_policy => [
"grouppolicy_300",
"grouppolicy_400"
],
},
:"user_200" => {
:user_policy => [
"userpolicy_300",
"userpolicy_400"
],
:group_policy => [
"grouppolicy_300",
"grouppolicy_400"
],
},
}
上述结构是数组的哈希散列和我只是无法在Ruby中得到这个工作。顺便说一句,我已经手动编写了上述代码,因此可能存在语法错误。
我想:
hash = Hash.new{ |h,k| h[k] = Hash.new(&h.default_proc) }
,但是当我有nested hashes
和no array
在路上这只会工作。
然后我尝试:
hash = Hash.new{ |h,k| h[k] = [] }
,但这样的工作只为hash of arrays
而不是hash of hash of array
。
我需要在一个地方捕获这些数据,我想像上面的代码片段中所显示的那样进行perl方式。
问:
- 如何在Ruby中创建
hash of hash of array
? - 是否有更通用的方式来初始化任何深度嵌套散列/数组组合?
- 或者我不是以RUBY'ISH的方式思考,有没有更好的方式来解决我的根本问题?
UPDATE:
这是我的实际代码:
array_users = Array.new
hash_user_polices = Hash.new{ |h,k| h[k] = [] }
iam = Aws::IAM.new
iam.list_users().each do |resp|
resp.users.each do |x|
array_users << x.user_name
end
end
array_users.each do |user|
iam.list_user_policies(:user_name => user).each do |resp|
resp.each do |x|
x.policy_names.each do |y|
hash_user_polices[:"#{user}"] << y.to_s
end
end
end
end
所以,
我得到的用户列表,并把它放在
array_users
。然后我得到作为array
返回的各自的用户策略(因此我迭代了x.policy_names.each do |y|
)。我真的很想拥有
hash_user_polices[:"#{user}"][:user_policy] << y.to_s
。但是由于我在红宝石方面的专业知识有限,我只能在
hash_user_polices[:"#{user}"] << y.to_s
之后将其定义为hash_user_polices = Hash.new{ |h,k| h[k] = [] }
。我将写一段代码来获得group_policies,因此当时我希望它有
hash_user_polices[:"#{user}"][:group_policy] << y.to_s
。
总之,我取user list
,在三个不同的API调用user policy
和group policy
和挣扎在一个地方这三个巩固,这样我可以做出一些道理出来。
这完全取决于数据源(S)的结构。你能否展示他们? – BroiSatse
@BroiSatse,请找到更新。谢谢。 – slayedbylucifer