gpt4 book ai didi

C# 遍历两个列表 - 可交换的内/外循环

转载 作者:太空宇宙 更新时间:2023-11-03 23:03:20 27 4
gpt4 key购买 nike

我需要遍历三个列表并处理每个组合。最外层和第二级循环(list1/list2)的顺序取决于一些排序规则。此外,我在最后一个 (list3) foreach 循环之前和之后都有一些逻辑。ProcesPair 方法使用所有三个项目并取决于它们的顺序。

        if (order == Order.Right)
{
foreach (var a in list1)
{
foreach (var b in list2)
{
DoSomethingBefore();

foreach (var c in list3)
{
ProcessPair(a, b, c);
}

DoSomethingAfter();
}
}
}
else if (order == Order.Down)
{
foreach (var b in list2)
{
foreach (var a in list1)
{
DoSomethingBefore();

foreach (var c in list3)
{
ProcessPair(a, b, c);
}

DoSomethingAfter();
}
}
}

有没有可能让它更优雅?我的意思是,如何减少代码中的循环,例如 Zip 函数,但每个循环都是相互的。

最佳答案

嵌套循环是 LINQ 的指标 SelectMany .因此,示例代码的等价物可能是这样的:

var pairs = 
order == Order.Right ? list1.SelectMany(a => list2, (a, b) => new { a, b }) ?
order == Order.Down ? list2.SelectMany(b => list1, (b, a) => new { a, b }) :
null;

if (pairs != null)
{
foreach (var pair in pairs)
{
DoSomethingBefore();
foreach (var c in list3)
{
ProcessPair(pair.a, pair.b, c);
}
DoSomethingAfter();
}
}

关于C# 遍历两个列表 - 可交换的内/外循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42257210/

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