![](/img/trans.png)
[英]Ruby on Rails: combine (or append?) values from array of hashes with an array of arrays
[英]Complex ruby array of hashes combine
我想更改我的哈希數組,將具有相同鍵和不同值的所有哈希組合到相同的哈希中,這就是我的意思:
[
[0] {
"Property 1" => {
"Portal" => #<Client:0x70aa253d> {
:team_id => 1,
:cap_id => 25,
:user_id => 145,
:active => true,
:created_at => Wed, 18 Mar 2015 11:52:11 EDT -04:00,
:updated_at => Wed, 18 Mar 2015 11:52:11 EDT -04:00
}
}
},
[1] {
"Property 2" => {
"Client Solutions" => #<Client:0x70aa221c> {
:team_id => 2,
:cap_id => 25,
:user_id => 145,
:active => true,
:created_at => Wed, 18 Mar 2015 11:52:27 EDT -04:00,
:updated_at => Fri, 20 Mar 2015 12:32:52 EDT -04:00
}
}
},
[2] {
"Property 1" => {
"Other" => #<Client:0x680f8067> {
:team_id => 2,
:cap_id => 25,
:user_id => 145,
:active => true,
:created_at => Fri, 20 Mar 2015 12:52:23 EDT -04:00,
:updated_at => Fri, 20 Mar 2015 12:52:23 EDT -04:00
}
}
}
]
因此,合並后的哈希數組應如下所示:
[
[0] {
"Property 1" => {
"Portal" => #<Client:0x70aa253d> {
:team_id => 1,
:cap_id => 25,
:user_id => 145,
:active => true,
:created_at => Wed, 18 Mar 2015 11:52:11 EDT -04:00,
:updated_at => Wed, 18 Mar 2015 11:52:11 EDT -04:00
},
"Other" => #<Client:0x680f8067> {
:team_id => 2,
:cap_id => 25,
:user_id => 145,
:active => true,
:created_at => Fri, 20 Mar 2015 12:52:23 EDT -04:00,
:updated_at => Fri, 20 Mar 2015 12:52:23 EDT -04:00
}
}
},
[1] {
"Property 2" => {
"Client Solutions" => #<Client:0x70aa221c> {
:team_id => 2,
:cap_id => 25,
:user_id => 145,
:active => true,
:created_at => Wed, 18 Mar 2015 11:52:27 EDT -04:00,
:updated_at => Fri, 20 Mar 2015 12:32:52 EDT -04:00
}
}
}
]
我嘗試了幾件事,看起來merge
和reverse_merge
忽略了重復的值。 假設result
是保存哈希數組的變量,請嘗試以下操作:
result.inject(:merge)
result.reduce(&:merge)
result.reduce({}, :reverse_merge)
根據我使用的是reverse_merge
還是merge
我只能得到property 1
。
我在該Property
獲得了Portal
或Other
,無法像所描述的那樣獲得兩者,我做錯了什么?
您遇到的問題是, merge
將為給定的每個鍵取一個值。 您想在這里有所不同。
如果每個條目都不會有一個以上的記錄:
result.group_by {|r| r.keys.first }.each {|k, v| v.replace(v.flat_map(&:values)) }
一般的想法是,我們將按每個條目找到的第一個鍵將初始數組中的條目分組(在本例中是屬性ID,因為它是唯一的鍵)。 這為我們提供了{property_id => [{property_id => record}, ...]}
的哈希,通過將值替換為每個記錄的值列表,我們將其轉換為適當的格式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.