微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取元组映射中所有列表的总长度

如何解决获取元组映射中所有列表的总长度

我正在处理一个 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 举报,一经查实,本站将立刻删除。