假设我有一个元组列表List[(A, B)]
。将其转换为multimap
的最佳方法是什么?它将A
映射到Set[B]
?我可以建立一个不可变的multimap
?如何从Scala中的元组列表构建多图?
21
A
回答
20
我可以建立一个不可改变的多重映射?
不符合Scala标准库中的MultiMap
。当然,你可以自己写。
将其转换为多图的最佳方法是什么?
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)}
14
我有点糊涂了,Multimap
不映射到A
Set[B]
,它映射到A
其中B
可以B
有很多值。既然你想要一些不可改变的东西,我会把它改成Map[A, Set[B]]
这不是Multimap
,但是你会说你想要的东西之一。
// 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))
相关问题
- 1. 如何从scala列表中生成元组数组?
- 2. 如何从一大群元组中构建一个更小的元组列表?
- 3. Scala迭代构建列表
- 4. 如何使用scala从列表中创建单独的列表?
- 5. Scala过滤元组列表
- 6. Map Scala元组列表
- 7. 如何合并Scala中的数组列表中的元素?
- 8. 从Scala列表创建地图
- 9. 如何从Python中的元组列表中创建函数?
- 10. 如何从元组列表中创建2个data.frame列?
- 11. 如何从Scala中的类列表中提取唯一元素
- 12. 将元组列表缩减为scala中的单个元组
- 13. 使用列表理解构建元组
- 14. 如何使用scala在元组列表中查找字符串?
- 15. 如何从这个数组中构建“ul li”列表?
- 16. 从正则表达式构建元组
- 17. 创建从字典元组从列表
- 18. 试图从列表中构建组织树
- 19. 我将如何从元组列表中创建字典?
- 20. 如何从连接了多个信息的数组中创建列表视图?
- 21. 在scala中使列表解构为一个元组,或者使一个元组迭代成一个列表
- 22. 如何使用scala组合两个列表的元素?
- 23. 从numpy结构数组中删除列(数组中的元组列表)?
- 24. 如何创建序列化Scala数组?
- 25. 如何从Scala中给定的节点列表创建一个邻居地图?
- 26. 如何从元组列表中提取模式元组?
- 27. 查询以从产品列表中构建组件列表
- 28. 我如何从数组中的列表创建两个列表?
- 29. 如何从列表元素的属性创建数组?
- 30. 如何覆盖scala中元组的值?
你也可以使用'mapValues',这实际上不会产生一个新的集合,但将作为在值映射'view'。 –
'mapValues' - 不错。我以前从未使用过那种。更新以替代使用。 –
清洁仍然:'val m = l groupBy(_._ 1)mapValues(_ map {_._ 2} toSet)' –