var multiples = from i in Enumerable.Range(min, (max - min))
from r in roots
where i % r == 0
select i;
例如,如果roots = {2,10}
它会选择20
两次。C#试图避免重复
在这里可以避免重复吗?
var multiples = from i in Enumerable.Range(min, (max - min))
from r in roots
where i % r == 0
select i;
例如,如果roots = {2,10}
它会选择20
两次。C#试图避免重复
在这里可以避免重复吗?
可以使用Any()
,而不是一个完整的笛卡儿连接:
var multiples = from i in Enumerable.Range(min, (max - min))
where roots.Any(r => i % r == 0)
select i;
这有额外的好处,它会在roots
尽快停止测试部分,因为它找到一个成功,并且不需要第二次传递就可以提取不同的元素。
在这种情况下,它确实比'.Distinct()'聪明。 – 2013-03-08 07:00:27
这就是我正在寻找的!很酷! – user1376243 2013-03-08 07:02:18
@JeppeStigNielsen噢。一个好的。当人们需要时间来真正思考在问题中正在做什么时,会发生这种情况。 – 2013-03-08 07:08:01
使用Distinct
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
,因此它应该很好地解决dublicates。
编辑
它确实 INFACT适用于匿名类型(见叶普的评论)。因为@Jeppe说匿名类型有一个“好”Equals
enabeling Distict
来确定对象是否相等/ dublicates。
非常感谢您的回答! – user1376243 2013-03-08 07:00:19
@ user1376243如果解决了您的查询,请点击勾号接受答案。 – 2013-03-08 07:05:28
你:对匿名类型不太适用它('.Distinct()')在匿名类型上效果很好,只要anonumous类型的每个属性的类型都是一个带有“good”'Equals'和'GetHashCode'实现的类型。匿名类型将(自动)具有“Equals”和“GetHashCode”,它们实现了“坐标式”的相等比较。 – 2013-03-08 07:15:16
使用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();
如果你使用'multiples.Distinct()'之后,将不包含重复。 – 2013-03-08 06:52:44