var multiples = from i in Enumerable.Range(min, (max - min))
from r in roots
where i % r == 0
select i;
例如,如果roots = {2,10}
它会选择20
两次。
是否可以在这里避免重复?
使用不同的
var multiples = (from i in Enumerable.Range(min, (max - min))
from r in roots
where i % r == 0
select i).Distinct();
这适用于 和 等简单string
类型int
。在匿名类型上不是很好。
在您的情况下,它i
是一个int
,因此它应该能够整理出重复项。
编辑
它确实适用于匿名类型(请参阅 Jeppe 的评论)。因为正如@Jeppe 所说,匿名类型具有“良好”Equals
特性Distict
,可以确定 to 对象是否相等/重复。
您可以使用Any()
而不是完整的笛卡尔连接:
var multiples = from i in Enumerable.Range(min, (max - min))
where roots.Any(r => i % r == 0)
select i;
这还有一个额外的好处,即roots
一旦找到成功的元素,它将立即停止测试元素,并且不需要第二次通过即可提取不同的元素。
使用DISTINCT
var multiples = (from i in Enumerable.Range(min, (max - min))
from r in roots
where i % r == 0
select i).Distinct();
请使用Distinct()
方法
var multiples = (from i in Enumerable.Range(min, (max - min))
from r in roots
where i % r == 0
select i).Distinct();