排序/排序阻塞整理

本文关键字:排序 | 更新日期: 2023-09-27 18:37:06

根据

BlockingCollection<T>中的项目值按特定顺序对项目进行排序的最佳方法是什么?我知道有一种OrderBy方法,可以用来实现订购吗?

排序/排序阻塞整理

听起来您需要根据某些比较标准对队列中的项目进行排序。这基本上是一个Priority Queue.

有一种方法可以将优先级队列与BlockingCollection<T>一起使用。您必须编写一个实现IProducerConsumerCollectionPriority Queue,并将该队列的实例传递给相应的BlockingCollection构造函数。

幸运的是,Microsoft提供了演示如何执行此操作的示例代码。它还包括简单优先级队列的源代码。

在线上还有许多其他优先级队列实现,例如这里。但是,您必须修改它们才能实现IProducerConsumerCollection,这不太可能是一项微不足道的任务。

[编辑] 我找到了一个实现IProducerConsumerCollection的并发优先级队列 - 你应该能够使用它。

检查这个 https://msdn.microsoft.com/en-us/library/bb534966(v=vs.110).aspx

从 MSDN:

class Pet
{
    public string Name { get; set; }
    public int Age { get; set; }
}
public static void OrderByEx1()
{
    Pet[] pets = { new Pet { Name="Barley", Age=8 },
                   new Pet { Name="Boots", Age=4 },
                   new Pet { Name="Whiskers", Age=1 } };
    IEnumerable<Pet> query = pets.OrderBy(pet => pet.Age);
    foreach (Pet pet in query)
    {
        Console.WriteLine("{0} - {1}", pet.Name, pet.Age);
    }
}
/*
 This code produces the following output:
 Whiskers - 1
 Boots - 4
 Barley - 8
*/