所以我有一个具有以下结构的哈希值(扩展到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:
我已经尝试过压缩,合并,以我知道的方式扩展哈希,但我能得到的最好的是一个新的哈希,它会丢弃除了找到的第一个第二级值以外的所有值。
有什么想法吗?
答案 0 :(得分: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
}
}
}
]
}