How to build a multimap from a list of tuples in Scala?

后端 未结 2 1304
暗喜
暗喜 2020-12-11 00:06

Suppose I have a list of tuples List[(A, B)]. What is the best way to convert it to a multimap, which maps A to Set[B]? C

2条回答
  •  悲&欢浪女
    2020-12-11 00:45

    I'm a bit confused, Multimap doesn't map A to Set[B], it maps A to B where B can have many values. Since you want something immutable, I'm going to change this to Map[A, Set[B]] which isn't a Multimap but does one of the things you said you wanted.

    // 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))
    

提交回复
热议问题