回答
假设您的意思是List<T>
,您可以反复使用GetRange
方法。哎呀,你可以用LINQ做到这一点:
var lists = Enumerable.Range(0, (list.Count + size - 1)/size)
.Select(index => list.GetRange(index * size,
Math.Min(size, list.Count - index * size)))
.ToList();
或者你可以只使用一个循环,当然:
public static List<List<T>> Split(List<T> source, int size)
{
// TODO: Prepopulate with the right capacity
List<List<T>> ret = new List<List<T>>();
for (int i = 0; i < source.Count; i += size)
{
ret.Add(source.GetRange(i, Math.Min(size, source.Count - i)));
}
return ret;
}
这在某种程度上比使用GroupBy
更有效,但它仅限于List<T>
作为输入。
@Downvoter:护理解释? – 2011-04-08 07:58:45
历史:我从来没有见过乔恩,甚至连一秒都没有看到过-1。我会问他的位置:负选民会照顾详细吗? - >当然他把我打到那个:-) – Peter 2011-04-08 07:59:30
@Jon,我没有倒下,但我认为这是由于后来的例子。 – 2011-04-08 08:00:58
你可以使用LINQ:
var list = Enumerable.Range(1, 190);
var sublists = list
.Select((x, i) => new { Index = i, Value = x })
.GroupBy(x => x.Index/50)
.Select(x => x.Select(v => v.Value).ToList())
.ToArray();
var list = new List<int>(Enumerable.Range(1,190));
var page_size = 50;
var max_pages = 1 + list.Count()/page_size;
for(int page = 1; page <= max_pages; page++) {
var chunk = list.Skip(page_size * (page-1)).Take(page_size);
// do whatever
}
我已经尝试了递归方法。只是为了看看它会是什么样子。
List<List<T>> SplitIntoChunks<T>(IEnumerable<T> originalList, int chunkSize)
{
if(originalList.Take(1).Count() == 0)
{
return new List<List<T>>();
}
var chunks = new List<List<T>> {originalList.Take(chunkSize).ToList()};
chunks.AddRange(SplitIntoChunks(originalList.Skip(chunkSize), chunkSize));
return chunks;
}
的
- 1. 根据索引将Python列表拆分成几个列表
- 2. 根据条件拆分列表(性别)
- 3. 根据类拆分表 - jquery
- 4. 根据索引列
- 5. Scala如何在特定索引处拆分列表
- 6. 将列表拆分成指定索引处的列表元组
- 7. 根据列中的值将SQL表拆分为多个表
- 8. 如何根据列表成员的属性拆分(T)的通用列表?
- 9. 根据分隔符拆分列值?
- 10. R:如何根据R中的符号拆分特定列?
- 11. R根据另一列拆分一列
- 12. 如何根据序言中的2个列表创建索引值列表
- 13. 如何根据列表中的索引创建两个新列表?
- 14. 根据列/表名选择索引
- 15. 根据列表项目内容(字符串)拆分列表
- 16. 如何将列表拆分为C#中的部分?
- 17. 根据索引列表,从列表中删除项目
- 18. 通过分隔符将列表拆分为子列表而不是通过C#中的索引
- 19. 如何根据字符拆分数据库中的数据
- 20. 按子阵列索引列表拆分数组
- 21. 根据python中的特殊字符将动态列表拆分为子列表
- 22. 根据列服从约束将表中的数据行拆分成多个表
- 23. 如何根据索引列表替换多个矢量元素
- 24. 如何根据矢量的索引来转换列中的值?
- 25. 根据值从OCI拆分表
- 26. 如何根据同一个表中的第二列中的值拆分1列数据?
- 27. 如何根据Python中的交叉点拆分数据框?
- 28. 如何在python中拆分列表?
- 29. 根据浮动条目的大小拆分列表
- 30. 数据帧列表的拆分列
可能重复[分割清单与LINQ子列表(http://stackoverflow.com/questions/419019/split-list-into-sublists-with-linq) – psubsee2003 2014-04-13 11:45:47