C# 列表到LINQ中的列

C# 列表到LINQ中的列,c#,linq,C#,Linq,给定一个IEnumerable和行计数,我想将其转换为IEnumerable,如下所示: 输入: Row Count: 3 List: [1,2,3,4,5,6,7] 行数:3 清单:[1,2,3,4,5,6,7] 输出 [ [1,4,7] [2,5] [3,6] ] [ [1,4,7] [2,5] [3,6] ] 编辑 我想这是任何IEnumerable工作,而不是依赖于T是一个Int32 如何使用LINQ实现这一点 如果你的目标是这样的话,这将吸引3人一组 但令人讨厌的做法是:-)

给定一个
IEnumerable
和行计数,我想将其转换为
IEnumerable
,如下所示:

输入:

Row Count: 3 List: [1,2,3,4,5,6,7] 行数:3 清单:[1,2,3,4,5,6,7] 输出

[ [1,4,7] [2,5] [3,6] ] [ [1,4,7] [2,5] [3,6] ] 编辑 我想这是任何IEnumerable工作,而不是依赖于T是一个Int32


如何使用LINQ实现这一点

如果你的目标是这样的话,这将吸引3人一组

但令人讨厌的做法是:-)

这可以做到:

var list = new List<object> { 1, "two", 3, 4, 5, 6 ,7 };
int count = 3;
var rows = list.Select((item, index) => new { Item = item, Index = index })
            .GroupBy(o => o.Index % count)
            .Select(g => g.Select(o => o.Item));
var list=新列表{1,“2”,3,4,5,6,7};
整数计数=3;
var rows=list.Select((项,索引)=>new{item=item,index=index})
.GroupBy(o=>o.Index%计数)
.Select(g=>g.Select(o=>o.Item));

它应该适用于任何可枚举的

,类似这样的东西应该适用

int[] list = new[] {1,2,3,4,5,6,7};
int[] offsets = new[] {0,1,2};
int[][] sorted = 
    offsets.Select((offset) => list.TakeWhile((_,ix,_) => ix % 3 == offset))

警告:未测试。我不使用c#编写程序,但想法应该很清楚。

@VoodooChild:Output类型是
IEnumerable
。yerp这就是诀窍,想知道它有多高效,它是否在列表中运行了不止一次?@VoodooChild:Guffa说的。但关键是分组本身就是
IEnumerable
,所以它可以满足您的需要…@Sam Saffron-我非常怀疑这一点。这些Linq扩展方法在大多数情况下都得到了很好的实现。稍后我会在Reflector中查看,并让您知道。理想情况下,我也需要它来处理此问题。。。Enumerable.Range(1,10)。选择(=>“a”).ToList();
var src = new List<int> { 2, 4, 8, 16, 23, 42, 101 };
var i = 0;
var answer = src.GroupBy(item => i++ % 3)
                .Select(item => item.ToArray())
                .ToArray();
var src = new List<int> { 2, 4, 8, 16, 23, 42, 101 };
var i = 0;
var answer = src.GroupBy(item => i++ % 3)
                .Select(item => item.ToArray())
                .ToArray();
        var src = new int[] { 4, 8, 15, 16, 23, 42, 101 };

        var b = Enumerable.Range(0, src.Length)
                   .Select(index => index)
                   .GroupBy(index => index % 3)
                   .Select(indexes => indexes.Select(index => src[index]).ToArray())
                   .ToArray();