list - 获取元组映射中所有列表的总长度
问题描述
我正在做一个 Scala 项目,我有一个 Map 类型Map[Long, Tuple2[Boolean, List[Int]]]
。
我需要将地图内所有列表中的元素总数分配给一个变量。
我目前有一个可行的解决方案,但是,我想要一个更有效的解决方案。我相信我听人说过你可以使用一个叫做flatMap
. 所以本质上,我想知道是否有不需要循环的解决方案,我可以说添加 map 中所有列表的长度。
我的解决方案如下:
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
. 然后我们遍历每个列表,将它们相加并返回中间结果。当我们到达键值对的末尾时,最后一个累积的元素将作为结果返回。
推荐阅读
- jquery - 循环 SkewX 增加和减少
- php - 在 Guzzle POST 请求中使用 cookieJar 发送 cookie 不起作用
- android - 谷歌地图在安卓设备上找不到路线
- php - Codeigniter 获取两个日期的差值
- c++ - 对于 ~95% 写入/5% 读取线程安全无序映射,是否有一个简单的解决方案?
- jestjs - 用 Jest 处理 process.exit(1)
- css - 如何为不同的插槽设置不同的样式?
- internet-explorer-11 - Material-UI 下拉菜单在 IE11 中导致错误
- c - 一个程序,用于确定在 c 语言中创建字符串回文的最小插入次数。我得到的错误是缺少标准输出
- gradle - 无法解决最近创建的 grails 项目中的依赖关系