Jon*_*eet 21
假设您的意思是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();
Run Code Online (Sandbox Code Playgroud)
或者你可以只使用一个循环,当然:
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;
}
Run Code Online (Sandbox Code Playgroud)
这比使用更有效GroupBy,尽管它仅限于List<T>输入.
我们IEnumerable<T>在Batch.cs中的MoreLINQ中使用了另一个实现.
Dar*_*rov 10
您可以使用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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9574 次 |
| 最近记录: |