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