首页 > 解决方案 > 获取元组映射中所有列表的总长度

问题描述

我正在做一个 Scala 项目,我有一个 Map 类型Map[Long, Tuple2[Boolean, List[Int]]]

我需要将地图内所有列表中的元素总数分配给一个变量。

我目前有一个可行的解决方案,但是,我想要一个更有效的解决方案。我相信我听人说过你可以使用一个叫做flatMap. 所以本质上,我想知道是否有不需要循环的解决方案,我可以说添加 map 中所有列表的长度

我的解决方案如下:

for((k, v) <- myMap) total = total + v._2.length

标签: listscaladictionaryflat

解决方案


就效率而言,您的执行将始终O(n)在您的地图中。

如果您想使用更具声明性的方法,可以使用foldLeft

val total = myMap.foldLeft(0) {
  case (total, (_, list)) => total + list.length
}

foldLeft将种子作为第一个参数列表,我们可以将其初始化为0. 然后我们遍历每个列表,将它们相加并返回中间结果。当我们到达键值对的末尾时,最后一个累积的元素将作为结果返回。


推荐阅读