1

可能重复:
在 ruby​​ 中合并深度哈希

所以我有一个具有以下结构的哈希(分解到 YAML 以供查看),我想通过第一个键合并/合并/扁平化。

- 1001: 
    Twitter: 
      values: 
        "2012-11-29": 24.0
- 1001: 
    Linkedin: 
      values: 
        "2012-11-29": 25.0
- 1001: 
    Facebook: 
      values: 
        "2012-11-29": 6.0

- 2002: 
    Twitter: 
      values: 
        "2012-11-29": 26.0
- 2002: 
    Pinterest: 
      values: 
        "2012-11-29": 1.0

我想尽可能容易地将其归结为以下形式:

- 1001
   Twitter:
     values:
       #some values here
   Facebook:
     values:
       #some values
- 2002
   Pinterest:
     values:
   Facebook:
     values:

我已经尝试过以我知道的各种方式压缩、合并、散列哈希,但我能得到的最好的结果是一个新的哈希,它丢弃了它找到的第一个二级值以外的所有值。

有任何想法吗?

4

1 回答 1

2

这是一个快速的解决方法。

初始哈希:

  [
    [0] {
        1001 => {
            "Twitter" => {
                "values" => {
                    "2012-11-29" => 24.0
                }
            }
        }
    },
    [1] {
        1001 => {
            "Linkedin" => {
                "values" => {
                    "2012-11-29" => 25.0
                }
            }
        }
    },
    [2] {
        1001 => {
            "Facebook" => {
                "values" => {
                    "2012-11-29" => 6.0
                }
            }
        }
    },
    [3] {
        2002 => {
            "Twitter" => {
                "values" => {
                    "2012-11-29" => 26.0
                }
            }
        }
    },
    [4] {
        2002 => {
            "Pinterest" => {
                "values" => {
                    "2012-11-29" => 1.0
                }
            }
        }
    }
]

用于inject合并它:

hash = hash.inject({}) {|f,c| k,v = c.first; (f[k] ||= []) << v; f }

获得这个:

{
    1001 => [
        [0] {
            "Twitter" => {
                "values" => {
                    "2012-11-29" => 24.0
                }
            }
        },
        [1] {
            "Linkedin" => {
                "values" => {
                    "2012-11-29" => 25.0
                }
            }
        },
        [2] {
            "Facebook" => {
                "values" => {
                    "2012-11-29" => 6.0
                }
            }
        }
    ],
    2002 => [
        [0] {
            "Twitter" => {
                "values" => {
                    "2012-11-29" => 26.0
                }
            }
        },
        [1] {
            "Pinterest" => {
                "values" => {
                    "2012-11-29" => 1.0
                }
            }
        }
    ]
}

工作演示

于 2012-12-05T19:07:18.477 回答