簡體   English   中英

復雜的紅寶石哈希組合

[英]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
                }
            }
        }
    ]

我嘗試了幾件事,看起來mergereverse_merge忽略了重復的值。 假設result是保存哈希數組的變量,請嘗試以下操作:

result.inject(:merge)
result.reduce(&:merge)
result.reduce({}, :reverse_merge)

根據我使用的是reverse_merge還是merge我只能得到property 1

我在該Property獲得了PortalOther ,無法像所描述的那樣獲得兩者,我做錯了什么?

您遇到的問題是, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM