【发布时间】:2017-04-02 23:08:39
【问题描述】:
IEnumerable<IEnumerable<object>> rows = new List<List<object>
{
//Columns
new List<object> { 10, 20, 30, 40, 50 },
new List<object> { 10, 20, 30, 40, 50 },
new List<object> { 10, 20, 30, 40, 50 },
new List<object> { 10, 20, 30, 40, 50 }
}
我基本上想将所有 10 岁、20 岁、30 岁、40 岁、50 岁的人分组。
我想以最好的方式使用 Linq 来完成它。请考虑到我的收藏规模可能高达 2000 万或更多。
我可以通过执行以下操作来实现它,但是当我对组集合执行每个操作时,它会给我带来内存不足的异常。
IEnumerable<IEnumerable<object>> rows = Enumerable.Repeat(new List<object> { 10, 20, 30, 40, 50 }, 20000000);
var group = rows.SelectMany(x => x.Select((InnerValue, Index) => new { Index, InnerValue })).GroupBy(x => x.Index);
预期结果如下:
var expectedResult = new List<List<object>
{
new List<object> { 10, 10, 10, 10, 10 },
new List<object> { 20, 20, 20, 20, 20 },
new List<object> { 30, 30, 30, 30, 30 },
new List<object> { 40, 40, 40, 40, 40 }
}
谢谢。
【问题讨论】:
-
你能显示结果应该是什么吗?我不完全明白需要什么结果。基本上你想提取列?
-
var allITems = rows.SelectMany(x=>x.Select((value, index) =>new {value, index})); var group1 = allITems.Where(x=>x.index ==0); -
@Damith 我看不出你的代码和我的代码有什么不同,除了你只是创建了一组 10 个。
-
我的代码有异常吗?我没有使用 group by..
-
为什么选择 Linq?这种转换对于 Linq 来说是不自然的,通常也不能推迟,所以简单地迭代构建
List<List<object>>对我来说是一个很好的解决方案。
标签: c# .net linq ienumerable