Scala中如何保留Map指定键并过滤其余键?
在Scala中过滤Map仅保留指定键
针对你定义的Map:
val x = Map("a"->10, "b"->20, "c"->30, "d"->40)
这里有几种简单实用的方法来保留"a"和"c"键,过滤其他条目:
使用
filterKeys方法(最简洁的方式):
利用filterKeys结合集合的包含判断,快速筛选出目标键:val targetKeys = Set("a", "c") val filteredMap = x.filterKeys(targetKeys) // 结果: Map(a -> 10, c -> 30)这里
targetKeys(k)等价于targetKeys.contains(k),Set的contains操作是O(1),效率很高。使用
collect方法(更灵活的场景):
如果需要在过滤时对键值对做额外处理,collect结合模式匹配会更合适:val targetKeys = Set("a", "c") val filteredMap = x.collect { case (k, v) if targetKeys.contains(k) => (k, v) }直接构造新Map(适用于键数量少且确定存在的情况):
如果明确知道"a"和"c"一定在原Map中,可以直接构造新Map:val filteredMap = Map("a" -> x("a"), "c" -> x("c"))要是不确定键是否存在,改用
get避免抛出异常:val filteredMap = Map("a" -> x.get("a"), "c" -> x.get("c")).collect { case (k, Some(v)) => (k, v) }
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

