OrderBy使用LINQ在列表的开头和结尾之间交替

Ada*_*hts 0 c# linq

假设我有一个清单{1,3,5,7,9,11}

我想使用像这样的代码浏览列表

foreach (int myInt in myIntList.OrderBy(...))
{
    /// Do stuff
}
Run Code Online (Sandbox Code Playgroud)

但是这里的顺序是1然后是11然后是3然后是9然后是5然后7.如何按顺序执行此操作?

我的实际情况稍微复杂一点,for循环看起来像这样:

foreach (Tuple<string, int, int, int> im in iconMappings.OrderBy(i => i.Item4).ThenByDescending(i => i.Item3))
{
    // Do stuff
}
Run Code Online (Sandbox Code Playgroud)

因此,如上所述对它们进行排序我需要获得交替元素,因此理想情况下应该可以应用于此.

Bar*_*zKP 5

这给出了你想要的订单:

List<int> myIntList = new List<int>(new[] { 1, 3, 5, 7, 9, 11 });

var result = myIntList
    .Select((v, i) => new { Value = v, Index = i })
    .OrderBy(v => Math.Min(v.Index, Math.Abs((myIntList .Count - 1) - v.Index)))
    .Select(v => v.Value);
Run Code Online (Sandbox Code Playgroud)
foreach (var v in result)
{
    Console.WriteLine(v.ToString());
}
Run Code Online (Sandbox Code Playgroud)

得到:

1
11
3
9
5
7
Run Code Online (Sandbox Code Playgroud)