我有项目euler问题243的linq查询:
var y = from n in factors
from m in factors where m != n
select n * m;
问题是,对于素数因子2和3,它产生y = {6,6},它只需要{6}。
有没有办法在不多次调用y.Distinct()或y.Contains()的情况下执行此操作?
我还考虑过使用两个foreach循环,但问题是 - 我不能使用索引,所以它只是麻烦和笨拙。
答案 0 :(得分:1)
您可以对结果值进行不同的调用。这样您就不必在内循环上执行此操作。
var y = factors.SelectMany(n => factors.Where(m => n < m).Select(m => n * m)).Distinct();
如果factors = new[] { 2,3 }
您获得{ 6 }
作为结果。此外,如果factors = new[] { 2,3,4,6 }
您获得{ 6,8,12,18,24 }
而不是{ 6,8,12,12,18,24 }
。请注意,结果中没有额外的12
。
答案 1 :(得分:1)
正如Rick Sladkey所述,正在改变
from m in factors where m != n
到
from m in factors where m < n
生成正确的结果,而不必使用.Distinct()
。