gpt4 book ai didi

c# - 将嵌套的 For 循环转换为 LINQ 表达式

转载 作者:行者123 更新时间:2023-11-30 16:19:06 25 4
gpt4 key购买 nike

请考虑以下代码:

    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 循环在这里更好,因为我依赖于数组的索引位置,因为我正在通过它来获得结果集。

最佳答案

private static ISet<int> CalcSumsOfTwoNums2(IEnumerable<int> nums)
{
// get List<int> from nums to get info about collection length
var source = nums.ToList();

// proper iteration
var data = source.Take(source.Count - 1)
.SelectMany((e, ix) => source.Skip(ix)
.Take(source.Count - 1 - ix)
.Select(i => new { e, i }))
.Select(x => x.e + x.i)
.Where(x => x < MAX);

// return HashSet instead of IEnumerable<int>
return new HashSet<int>(data);
}

它返回与您的方法相同的结果。但是,我会保留您当前的解决方案。它会比 LINQ 有更好的性能。

关于c# - 将嵌套的 For 循环转换为 LINQ 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15453866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com