在迭代地图时过滤掉键

时间:2012-02-28 17:50:52

标签: scala map filter foreach iterator

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

    map.foreach(tuple where !list.contains(tuple._1) => { })

由于 布鲁斯

3 个答案:

答案 0 :(得分:10)

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)

但是,如果这是一张巨大的地图和一个庞大的集合,那么我建议先对它们进行排序并相互迭代,然后在你去的时候挑选出你需要的部分。对contains的重复调用可能效果不如您所愿,特别是如果您使用List代替Set

答案 1 :(得分:4)

map.withFilter{tuple => !list.contains(tuple._1)}.foreach{whatever}

等价

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

答案 2 :(得分:4)

这个问题一直是asked and answered before

使用Set[A]是函数A => Boolean的事实,您可以这样做:

map filterKeys s