1

我有 2 个集合:a是一系列 Scala 对象class Cb是一个字符串序列。C 有一个字符串字段 ,name它可能匹配b. 我想要的是循环a并找到所有c.nameb. 我如何在 Scala 中做到这一点?

4

2 回答 2

4

遍历 a 和 b 可能会变得昂贵,因为一个循环嵌套在另一个循环中会产生 O(n^2) 时间。如果 b 足够大,您可能希望首先将其变为 Set 以将其降低到 O(n)。

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

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

于 2012-06-19T03:28:14.333 回答
1

这是等效的 for 循环与 yield。

for(c <- a if b.contains(c.name)) yield c.name
于 2012-06-19T04:26:24.823 回答