使用linq将几个列表合并为一个

Tar*_*rec 2 c# linq merge list

是否有一种简单的方法可以获取相同大小的少量列表,并使用linq在每个索引中创建一个新的最小值/最大值?我的意思是如何比较相同索引的项目,并选择哪一个是Max或Min,如下所示:

List<List<int>> Some2dList = new List<List<int>>
                 { new List<int> { 1, 2, 3, 4, 5 }, 
                   new List<int> { 5, 4, 3, 2, 1 } } ;
List<int> NewList = new List<int>(5);

for(int i=0; i< 5; i++)
{
    int CurrentHighest=0;
    for(int j=0; j<2; j++)
    {
        if (Some2dList[j][i] > CurrentHighest)
            CurrentHighest = Some2dList[j][i];
    }
    NewList.Add(CurrentHighest);
}
//Which gives me {5,4,3,4,5}
Run Code Online (Sandbox Code Playgroud)

我简化了那些循环看起来更清晰.我知道我可以使用Concat和GroupBy,然后从每个中选择Max,但对于没有键值的简单类型和类,我无法弄明白.

编辑:我应该更精确.示例中的列表是手动分配的,但我问的是解决方案,这对于任何数量的列表都是灵活的.此外,列表总是大小相同.

I4V*_*I4V 6

列表和列表的大小没有限制可以是任何长度.

List<List<int>> Some2dList = new List<List<int>>{ 
        new List<int> { 1, 2, 3, 4, 5 }, 
        new List<int> { 5, 4, 3, 2, 1 },
        new List<int> { 8, 9 } 
        };
var res = Some2dList.Select(list => list.Select((i, inx) => new { i, inx }))
            .SelectMany(x => x)
            .GroupBy(x => x.inx)
            .Select(g => g.Max(y=>y.i))
            .ToList();
Run Code Online (Sandbox Code Playgroud)