我有 2 个集合:a
是一系列 Scala 对象class C
。b
是一个字符串序列。C
有一个字符串字段 ,name
它可能匹配b
. 我想要的是循环a
并找到所有c.name
与b
. 我如何在 Scala 中做到这一点?
问问题
218 次
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 回答