Scala迭代2个集合并找到匹配项

时间:2012-06-19 02:59:36

标签: scala

我有2个集合:aclass C的Scala对象序列。 b是一系列字符串。 C有一个字符串字段name,可能与b中的项目匹配。我想要的是循环浏览a并查找与c.name中的某个项匹配的所有b。我如何在Scala中执行此操作?

2 个答案:

答案 0 :(得分:4)

通过a和b迭代可能会变得昂贵,因为嵌套在另一个循环中的一个循环会产生O(n ^ 2)时间。如果b足够大,你可能想先把它变成一个Set,把它降到O(n)。

val bSet = b.toSet;
a.filter(c => b.contains(c.name))

我会将此读作“将以下过滤器应用于:对于a中的每个项目c,当且仅当c的名称在b中时才包含在结果中。”

答案 1 :(得分:1)

这是带有yield的循环的等价物。

for(c <- a if b.contains(c.name)) yield c.name