是否有.NET队列类允许一次出列多个项目?

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


Jam*_*Esh 6

您可以通过使用 LinqEnumerable.Range()方法和Select()扩展方法在 .NET 中实现此目的:

var chunk = Enumerable.Range(0, chuckCount).Select(i => queue.Dequeue()).ToList();

这是通过生成一个整数的枚举来实现的,然后对于新的可枚举中的每个整数,它将一个项目从队列中出列。确保通过调用立即完成操作ToList()

  • 如果队列小于 chunkCount,这将会崩溃,所以你需要防止这种情况。 (3认同)