2012-06-19 71 views
1

我有2个系列:aclass C的一个Scala对象序列。 b是一串字符串。 C有一个字符串字段,name,可能会匹配b中的一个项目。我想要的是循环通过a,并找到所有c.nameb中的一个项目匹配。我如何在Scala中做到这一点?Scala遍历2个集合并查找匹配结果

回答

4

迭代遍历a和b会变得昂贵,因为一个循环嵌套在另一个循环内会产生O(n^2)时间。如果b足够大,则可能需要先将其设置为Set,然后将其设置为O(n)。

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

我看这是“应用下面的过滤器的结果:C中的每个项目,包括它在结果当且仅当C的名字是在B”。

+0

你我的朋友是摇滚明星!谢谢, – Bob

+2

如果b足够大,您可能需要先将其设置为Set,例如: val bSet = b.toSet; a.filter(c => b.contains(c.name)) –

+0

感谢您的建议,亚历克斯,但为什么使它成为第一个定义足够大。 – Bob

1

下面是与yield相当的循环。

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