Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对块集合进行排序/排序_C#_.net_Blockingcollection - Fatal编程技术网

C# 对块集合进行排序/排序

C# 对块集合进行排序/排序,c#,.net,blockingcollection,C#,.net,Blockingcollection,根据特定顺序的值对BlockingCollection中的项目进行排序的最佳方法是什么。我知道有一种按排序的方法,它可以用来实现排序吗?检查这个 从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 }

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

检查这个

从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
*/
class宠物
{
公共字符串名称{get;set;}
公共整数{get;set;}
}
公共静态无效OrderByEx1()
{
宠物[]宠物={新宠物{Name=“大麦”,年龄=8},
新宠物{Name=“Boots”,年龄=4},
新宠物{Name=“胡须”,年龄=1};
IEnumerable query=pets.OrderBy(pet=>pet.Age);
foreach(查询中的宠物)
{
Console.WriteLine(“{0}-{1}”,pet.Name,pet.Age);
}
}
/*
此代码生成以下输出:
胡须-1
靴子-4
大麦-8
*/

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

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

幸运的是,微软已经提供了。它还包括一个简单优先级队列的源代码

在线上还有许多其他优先级队列实现。但是,您必须修改它们以实现
IProducerConsumerCollection
,这不太可能是一项简单的任务


[编辑]我找到了一个-您应该可以使用它。

为什么需要对它进行排序?@Dennis我需要根据参数对队列进行排序,以避免先到先得!这将对集合快照进行排序,而不是对集合本身进行排序。看起来OP需要一些优先级,所以继续收集项目。无法将有序收集设置为源?
BlockingCollection
是用于解决生产者-消费者任务的并发收集。任何线程都可以以线程安全的方式修改它。重新排序集合,重新分配集合至少会导致数据丢失。@Dennis在这种情况下您建议怎么做Dennis?@TimeMachine:您需要的是优先级队列。您已经有许多链接和答案。该链接不适用于并发优先级队列。