从哈希表“ hash1”中,我无法以常规方式获得结果“ hash2”:
hash1 = [a:['a1','b1','c1'],b:['a1','b1','c1','d1']]
hash2 = [a1:['a','b'],b1:['a','b'],c1:['a','b'],d1:['b']]
可以请您帮忙吗?
莫里斯
答案 0 :(得分:1)
您可以收集第一张地图的反向元组。然后根据第一个元素对它们进行分组并收集列表,或者只是缩小。例如:
def hash1 = [a:['a1','b1','c1'],b:['a1','b1','c1','d1']]
println(
hash1.collectMany{ k, vs ->
vs.collect{ [it, k] }
}.inject([:].withDefault{[]}){ m, t ->
m[t[0]] << t[1]; m
}
)
// => [a1:[a, b], b1:[a, b], c1:[a, b], d1:[b]]
答案 1 :(得分:1)
请注意,我在一个地图值中添加了重复项(a1),以展示如何消除重复项(如果有)。如果您仍想保留重复项,则只需从以下方法中删除.unique()
。
def map = [a:['a1','b1','c1','a1'],b:['a1','b1','c1','d1']]
map.inject([:].withDefault { [] }) { acc, key, val ->
val.collect { (acc[it] << key).unique() }
acc
}
// [a1:[a, b], b1:[a, b], c1:[a, b], d1:[b]]