Scala 在遍历贴图时过滤出关键帧

Scala 在遍历贴图时过滤出关键帧,scala,map,filter,foreach,iterator,Scala,Map,Filter,Foreach,Iterator,迭代映射并过滤掉某些键的最佳方法是什么?伪代码可能类似于 map.foreach(tuple where !list.contains(tuple._1) => { }) 谢谢 布鲁斯 等价地 for(tuple <- map if !list.contains(tuple._1)) whatever (元组)的 但是,如果这是一个巨大的映射和一个巨大的集合,那么我建议先对它们进行排序,然后相互迭代,在执行过程中提取所需的位。重复调用contains可能不会像您希望的那样

迭代映射并过滤掉某些键的最佳方法是什么?伪代码可能类似于

    map.foreach(tuple where !list.contains(tuple._1) => { })
谢谢 布鲁斯

等价地

for(tuple <- map if !list.contains(tuple._1)) whatever
(元组)的

但是,如果这是一个巨大的映射和一个巨大的集合,那么我建议先对它们进行排序,然后相互迭代,在执行过程中提取所需的位。重复调用
contains
可能不会像您希望的那样执行,特别是如果您使用
列表而不是
集合,那么这个问题已经解决了n:

使用
Set[A]
是一个函数
A=>Boolean
,您可以执行以下操作:

map filterKeys s

“Derek Wyatt。好的。也许我应该考虑有一个第二张地图,排除了这些条目,因为每次过滤都是一样的。”Bruce Ferguson。把我说的话一语中的。过早的优化是许多邪恶的根源。“德雷维亚特。我听到了。谢谢你的回答,KNUTH提醒。你可以。”st do
m filterKeys s
如果
s
是一个集合,是否要创建一个没有这些键的新映射,通过删除这些键来更改现有的可变映射,或者只对除这些键之外的每个键/值执行一些操作?@DanielC.Sobral是最后一个选项。这是一个最多有2000个条目的映射,最多有20个条目被排除在外键。映射经常更新(排除键和包含键),但我只希望访问此特定操作的包含键。因此,我更希望有一个单独的映射以供内存和更新考虑。可能是重复的感谢,我在提交之前查看了,但没有看到。干杯,Bruce,除了它是一个列表,而不是一组,他希望按列表之外的内容进行筛选这是answ呃,回答这个问题。
val m = Map(1 -> "a", 2 -> "b", 4 -> "c", 10 -> "d")
val s = Set(1,4)
m.filterKeys { s.contains(_) == false }
// Map(2 -> b, 10 -> d)
map filterKeys s