如何将两个数组合并为唯一key:
keyList = ["a", "b", "c", "d"]
keyValueList = [
["a", [1, 2, 3]],
["a", [4, 5, 6]],
["b", [5, "a", 3]],
["b", ["test", 4, 3]],
["c", [1, "number", 110]]
]
Run Code Online (Sandbox Code Playgroud)
得到以下?
[
["a", [[1, 2, 3], [4, 5, 6]]],
["b", [[5, "a", 3], ["test", 4, 3]]],
["c", [[1, "number", 110]]]
]
Run Code Online (Sandbox Code Playgroud)
keyValueList.
map(&:flatten).
group_by(&:shift).
select { |k, _| keyList.include?(k) }.
to_a
#? [["a", [[1, 2, 3], [4, 5, 6]]],
# ["b", [[5, "a", 3], ["test", 4, 3]]],
# ["c", [[1, "number", 110]]]
Run Code Online (Sandbox Code Playgroud)
目前尚不清楚为什么keyList需要阵列.
keyValueList.each_with_object(Hash.new {|h,k| h[k]=[]}) do |(k,arr),h|
h[k] << arr
end.to_a
#=> [["a", [[1, 2, 3], [4, 5, 6]]],
# ["b", [[5, "a", 3], ["test", 4, 3]]],
# ["c", [[1, "number", 110]]]]
Run Code Online (Sandbox Code Playgroud)
h[k] << arrh[k] << arr if keyList.include?(k)如果需要,可以更改为所需的行为.
以上也可以写成如下.
keyValueList.each_with_object({}) do |(k,arr),h|
(h[k] ||= []) << arr
end.to_a
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |