And*_*ena 11 .net c# linq collections
我认为一个非常常见的情况是拥有一个应该一次处理N个项目的队列.
例如..如果我们有23 items并且应该10一次处理,那就像:
Process batch of 10
Process batch of 10
Process batch of 3
Run Code Online (Sandbox Code Playgroud)
我可以用各种方式解决这个问题.我的问题是:.NET框架是否提供专门设计用于解决此方案的任何类?该Queue课程将是完美的,但它不允许一次出列多个项目.
And*_*ker 19
您可以在以下位置创建扩展方法Queue<T>:
public static class QueueExtensions
{
public static IEnumerable<T> DequeueChunk<T>(this Queue<T> queue, int chunkSize)
{
for (int i = 0; i < chunkSize && queue.Count > 0; i++)
{
yield return queue.Dequeue();
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
var q = new Queue<char>();
q.DequeueChunk(10) // first 10 items
q.DequeueChunk(10) // next 10 items
Run Code Online (Sandbox Code Playgroud)
示例: https ://dotnetfiddle.net/OTcIZX
您可以通过使用 LinqEnumerable.Range()方法和Select()扩展方法在 .NET 中实现此目的:
var chunk = Enumerable.Range(0, chuckCount).Select(i => queue.Dequeue()).ToList();
这是通过生成一个整数的枚举来实现的,然后对于新的可枚举中的每个整数,它将一个项目从队列中出列。确保通过调用立即完成操作ToList()。
| 归档时间: |
|
| 查看次数: |
7615 次 |
| 最近记录: |