我已經完成了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