将哈希数组转换为哈希

时间:2019-06-13 01:37:12

标签: ruby hash nested

我正在尝试转换以下内容:

dep = [
      {id: 1, depen: 2},
      {id: 1, depen: 3},
      {id: 3, depen: 4},
      {id: 5, depen: 3},
      {id: 3, depen: 6}
]

放入单个哈希:

# {1=>2, 1=>3, 3=>4, 5=3, 3=>6}

我尝试了在另一个question上找到的解决方案:

dep.each_with_object({}) { |g,h| h[g[:id]] = g[:dep_id] } 

但是,输出删除了元素并给了我

#{1=>3, 3=>6, 5=>2}

最后一个元素也不正确。

1 个答案:

答案 0 :(得分:6)

不能具有AND之类的哈希。哈希表的所有键都是唯一的。

如果要获取将每个ID映射到依赖项的列表的哈希,可以使用:

{1=>2, 1=>3, 3=>4, 5=3, 3=>6}

result = dep.
  group_by { |obj| obj[:id] }.
  transform_values { |objs| objs.map { |obj| obj[:depen] } }

产生

result = dep.reduce({}) do |memo, val|
  memo[val[:id]] ||= []
  memo[val[:id]].push val[:depen]
  memo
end