Groovy 沿途调换收集钥匙的地图
我正在尝试转换地图,以便:Groovy 沿途调换收集钥匙的地图,groovy,maps,transpose,Groovy,Maps,Transpose,我正在尝试转换地图,以便: [x: y, w: y, a: b] 变成 [y: [x, w], b: a] (所有变量都是字符串)执行以下操作 ["x": "y", "w": "y", "a": "b"].collectEntries { [it.value, it.key] } 在某种程度上让我明白了,但是在“y”的第一个新值上跺脚。我只得到:[y:w,b:a] 将新值存储到数组中以获取其公共新键的最佳方法是什么? 感谢您的帮助或建议。我希望这对您有所帮助: def map = ["x"
[x: y, w: y, a: b]
变成
[y: [x, w], b: a]
(所有变量都是字符串)执行以下操作
["x": "y", "w": "y", "a": "b"].collectEntries { [it.value, it.key] }
在某种程度上让我明白了,但是在“y”的第一个新值上跺脚。我只得到:[y:w,b:a]
将新值存储到数组中以获取其公共新键的最佳方法是什么?
感谢您的帮助或建议。我希望这对您有所帮助:
def map = ["x": "y", "w": "y", "a": "b"]
map.groupBy{ it.value }.collectEntries{ k, v -> [k, v.keySet()] }
我有一个类似的要求,但需要单独的键(类似于枢轴),因此我的解决方案有点不同:
def map = ["x": "y", "w": "y", "a": "b"]
def newKeys = map.collect{ it.value }.flatten() as Set
def transpose = newKeys.collectEntries{ [
(it): map.findAll{ k, v -> v.contains(it) }.collect{ it.key }
]}
println transpose
// [y:[x, w], b:[a]]