我正在尝试转换以下内容:
dep = [
{id: 1, depen: 2},
{id: 1, depen: 3},
{id: 3, depen: 4},
{id: 5, depen: 3},
{id: 3, depen: 6}
]
Run Code Online (Sandbox Code Playgroud)
变成单个哈希:
# {1=>2, 1=>3, 3=>4, 5=3, 3=>6}
Run Code Online (Sandbox Code Playgroud)
我尝试了在另一个问题上找到的解决方案:
dep.each_with_object({}) { |g,h| h[g[:id]] = g[:dep_id] }
Run Code Online (Sandbox Code Playgroud)
但是,输出删除了元素并给了我:
#{1=>3, 3=>6, 5=>2}
Run Code Online (Sandbox Code Playgroud)
最后一个元素也不正确的地方。
您不能有像这样的哈希{1=>2, 1=>3, 3=>4, 5=3, 3=>6}。哈希表的所有键都是唯一的。
如果要获取将每个ID映射到依赖项列表的哈希,可以使用:
result = dep.
group_by { |obj| obj[:id] }.
transform_values { |objs| objs.map { |obj| obj[:depen] } }
Run Code Online (Sandbox Code Playgroud)
要么
result = dep.reduce({}) do |memo, val|
memo[val[:id]] ||= []
memo[val[:id]].push val[:depen]
memo
end
Run Code Online (Sandbox Code Playgroud)
产生
{1=>[2, 3], 3=>[4, 6], 5=>[3]}
Run Code Online (Sandbox Code Playgroud)