tutorial funciones español scala multimap

funciones - ¿Cómo construir un multimapa de una lista de tuplas en Scala?



funciones en scala (2)

Supongamos que tengo una lista de listas de tuplas List[(A, B)] . ¿Cuál es la mejor manera de convertirlo en un multimap , que asigna A al Set[B] ? ¿Puedo construir un multimap inmutable ?


¿Puedo construir un multimap inmutable?

No con el MultiMap en la librería estándar de Scala. Por supuesto, usted puede escribir su propio.

¿Cuál es la mejor manera de convertirlo en un multimapa?

import scala.collection.mutable.{HashMap, Set, MultiMap} def list2multimap[A, B](list: List[(A, B)]) = list.foldLeft(new HashMap[A, Set[B]] with MultiMap[A, B]){(acc, pair) => acc.addBinding(pair._1, pair._2)}


Estoy un poco confundido, Multimap no asigna A al Set[B] , asigna A a B donde B puede tener muchos valores. Ya que quieres algo inmutable, voy a cambiar esto a Map[A, Set[B]] que no es un Multimap pero hace una de las cosas que dijiste que querías.

// This is your list of (A, B) val l = List((1, "hi"), (2, "there"), (1, "what''s"), (3, "up?")) // Group it and snip out the duplicate ''A'' // i.e. it initially is Map[A, List[(A, B)]] and we''re going to convert it // to Map[A, Set[B]] val m = l.groupBy(e => e._1).mapValues(e => e.map(x => x._2).toSet) println(m) // Prints: Map(3 -> Set(up?), 1 -> Set(hi, what''s), 2 -> Set(there))