如何解决获取元组映射中所有列表的总长度
我正在处理一个 Scala 项目,我有一个 Map[Long,Tuple2[Boolean,List[Int]]]
类型的 Map。
我需要将地图内所有列表中的元素总数分配给一个变量。
我目前有一个可行的解决方案,但是,我想要一个更有效的解决方案。我确信我听到人们说您可以使用名为 flatMap
的东西。所以基本上,我想知道是否有一个不需要循环的解决方案,我可以说添加地图中所有列表的长度。 >
我的解决方案如下:
for((k,v) <- myMap) total = total + v._2.length
解决方法
就效率而言,您的执行总是O(n)
。
如果您想使用更具声明性的方法,可以使用 foldLeft
:
val total = myMap.foldLeft(0) {
case (total,(_,list)) => total + list.length
}
foldLeft
将种子作为第一个参数列表,我们可以将其初始化为 0
。然后我们遍历每个列表,总结它们并返回中间结果。当我们到达键值对的末尾时,最后一个累积的元素将作为结果返回。
没有办法让你的代码更有效率,问题是O(N)。
但是,如果 Map
非常大,您可以并行化代码。您还可以使用除 List
之外的其他数据类型,它不需要自行迭代来计算其长度。
最后,提出另一种摆脱可变性的方法。
val total =
myMap
.valuesIterator
.map(_._2.length)
.sum
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。