scala - Scala 向 List[Map[String,Double]] 的每个元素插入新键
问题描述
我有一个地图列表,如下所示。
val data = List(
Map("a" -> 1.0, "b" -> 267.0, "c" -> 26.0, "d" -> 2.0), Map("a" -> 1.0, "b" -> 2678.0, "c" -> 40.0, "d" -> 2.0), Map("a" -> 4.0, "b" -> 267.0, "c" -> 26.0, "d" -> 2.0), Map("a" -> 1.0, "b" -> 2678.0, "c" -> 90.0, "d" -> 17.0)
)
我想为列表中的每个地图(元素)插入一个键。
说键是“k”,值是 1
所以,结果应该是这样的
List(Map(a -> 1.0, b -> 267.0, c -> 26.0, k -> 1, d -> 2.0), Map(a -> 1.0, b -> 2678.0, c -> 40.0, k -> 1, d -> 2.0), Map(a -> 4.0, b -> 267.0, c -> 26.0, k -> 1, d -> 2.0), Map(a -> 1.0, b -> 2678.0, c -> 90.0, k -> 1, d -> 17.0))
我使用下面的代码来获得相同的结果
var result:List[Map[String,Double]] = List.empty
result = result ::: data(key).map(x=>x.++(Map("k"->1)))
但它消耗了太多时间......列表中的 100k 个元素大约需要 300 毫秒
有没有其他有效的方法来做到这一点。理想的时间消耗应该是0。
解决方案
这应该足够快:
val m = (1 to 1000).map(_.toString).zipWithIndex.toMap // Map(710 -> 709, 205 -> 204, 45 -> 44, ...
val start = System.currentTimeMillis()
val l2 = (1 to 2000).map(_ => m) // List(Map(a -> 1.0, b -> 267.0, c -> 26.0, ...
val r = l2.map(_ + ("z" -> 2))
println(s"${r.length} maps of ${r.head.size} took ${System.currentTimeMillis() - start} ms")
打印:1001 的 2000 张地图耗时 5 毫秒
推荐阅读
- javascript - 是否可以在 JS 中的文件之间进行类通信?
- assembly - 为什么我的猜谜游戏在 sms32v50 中不起作用?
- c - double 和 float 的比较 - 隐式转换
- javascript - 未处理的拒绝(TypeError):data.filter 不是函数 - D3.js
- reactjs - 如何使用给定值更改输入?
- c++ - 树莓派,C++ 计时函数,值操作?
- for-loop - 返回符合条件的某些行 - Google Apps 脚本
- android - 为片段管理器设置屏幕方向 - Android
- python - 如何使用列的结果作为列引用?Python
- r - 使用管道的正确方法是什么?