【发布时间】:2013-03-05 10:25:24
【问题描述】:
请考虑以下代码:
private ISet<int> CalcSumsOfTwoNums(IEnumerable<int> nums) {
ISet<int> iset = new HashSet<int>();
var asArray = nums.ToArray();
for (var i = 0; i < asArray.Length - 2; i++) {
for (var j = i; j < asArray.Length - 1; j++) {
var sum = asArray[i] + asArray[j];
if (sum <= MAX) {
iset.Add(sum);
}
}
}
return iset;
}
将嵌套的for 循环语法转换为 LINQ 表达式或 LINQ 点表示法是否有意义?这是for 循环语法更合适的情况之一吗?我倾向于说for 循环在这里更好,因为我依赖于数组的索引位置,因为我正在通过它来获得结果集。
【问题讨论】:
-
也许你应该解释一下循环的实际作用,以使其更容易?
-
据我所知,Linq 具有常规循环的性能
-
@MarcinJuraszek - 我认为我试图发现的最重要的事情是,在
for循环语法中,在i和j上面保存数组索引的变量是计算总和的关键,我不明白如何将其转换为 LINQ 语法。nums中的值可以是任意值,例如 1 到 10。我返回ISet而不是IEnumerable以保证返回的值是唯一的。 -
你为什么要首先使用 LINQ?当然,这对于某种操作来说很好,但乍一看我会说这不是其中之一。也许它是有意的,但数组的最后一个值不会与你在 for 循环中的限制一起使用。
-
@WiiMaxx:由于涉及到 lambda 函数,LINQ 通常性能较差。它们看起来很简单,但实际上在实现中相当复杂。对所有课程案例都没有关系。