groovy maps transpose

groovy - transponer un mapa recogiendo claves a lo largo del camino



maps transpose (2)

Estoy tratando de transponer un mapa para que:

[x: y, w: y, a: b]

se convierte

[y: [x, w], b: a]

(todas las variables son cadenas) Haciendo algo como

["x": "y", "w": "y", "a": "b"].collectEntries { [it.value, it.key] }

me lleva a medio camino, pero pisa fuerte el primer valor nuevo para "y". Solo consigo: [y: w, b: a]

¿Cuál es la mejor manera de absorber los nuevos valores en una matriz para su nueva clave común? Gracias por cualquier ayuda o sugerencia.


Espero que esto ayude :

def map = ["x": "y", "w": "y", "a": "b"] map.groupBy{ it.value }.collectEntries{ k, v -> [k, v.keySet()] }


Tenía un requisito similar, pero necesitaba claves individuales (tipo de pivote), por lo que mi solución es un poco diferente:

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]]