gpt4 book ai didi

scala - 如何获取 map 的子集?

转载 作者:行者123 更新时间:2023-12-04 21:29:41 25 4
gpt4 key购买 nike

如何获取 map 的子集?

假设我们有

val m: Map[Int, String] = ...
val k: List[Int]

凡在 k 中的所有键存在于 m .

现在我想得到 map 的一个子部分 m只有键在列表中的对 k .

类似 m.intersect(k) ,但是 intersect未在 map 上定义。

一种方法是使用 filterKeys : m.filterKeys(k.contains) .但这可能有点慢,因为对于原始映射中的每个键,都必须在列表中进行搜索。

我能想到的另一种方式是 k.map(l => (l, m(l)).toMap .这里 wie 只是遍历我们真正感兴趣的键而不进行搜索。

有没有更好的(内置)方式?

最佳答案

m filterKeys k.toSet

因为一个 SetFunction .

关于性能 : filterKeys本身是 O(1),因为它通过生成一个覆盖了 foreach 的新 map 来工作。 , iterator , containsget方法。访问元素时会产生开销。这意味着新 map 不使用额外的内存,而且旧 map 的内存无法释放。

如果您需要释放内存并尽可能快地访问,一个快速的方法是折叠 k 的元素。进入新 map 而不产生中间 List[(Int,String)] :
k.foldLeft(Map[Int,String]()){ (acc, x) => acc + (x -> m(x)) }

关于scala - 如何获取 map 的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12146954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com