排序/订购BlockingCollecion

时间:2016-03-03 08:53:36

标签: c# .net blockingcollection

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

2 个答案:

答案 0 :(得分:2)

听起来你需要根据一些比较标准订购队列中的项目。这基本上是Priority Queue

有一种方法可以使用BlockingCollection<T>的优先级队列。您必须编写实现Priority Queue的{​​{1}}并将该队列的实例传递给相应的IProducerConsumerCollection构造函数。

幸运的是,Microsoft提供了sample code that demonstrates how to do this。它还包括简单优先级队列的源代码。

还有许多其他可用的优先级队列实现,for example here。但是,您必须修改它们以实现BlockingCollection,这不太可能是一项微不足道的任务。

[编辑]我找到了concurrent priority queue that implements IProducerConsumerCollection - 您应该可以使用它。

答案 1 :(得分:-1)

选中此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
*/