寻找任何现有的FIFO队列,它也根据主题处理覆盖,如下所示
struct QueueItem { string Topic; .... other data }
如果队列中有按订单添加的项目
q.Add( new QueueItem() { topic = A, ... } ); //1
q.Add( new QueueItem() { topic = B, ... } ); //2
q.Add( new QueueItem() { topic = C, ... } ); //3
q.Add( new QueueItem() { topic = A, ... } ); //4
q.Add( new QueueItem() { topic = B, ... } ); //5
在检索时,订单应该是 #4主题A - 跳过#1 #5主题B - 跳过#2 #3主题C
等
注意 - 根据上述规则
,添加/处理项目/主题的顺序非常重要想知道这是否是一个已知的场景,并且可能已经有现有的实施
答案 0 :(得分:1)
您正在寻找的是优先级队列。您的要求略有不同,因为它使用字母而不是整数作为优先级,但概念是相同的。查看答案C# Priority Queue和Priority queue in .Net
答案 1 :(得分:0)
对于一个好的线程安全队列实现,从v4开始检查框架内置的ConcurrentQueue<T>。
话虽如此,您要求的行为并不是严格意义上的队列,它更像是一个列表,其中Add()被覆盖以添加或替换等效的现有项目。所以问题仍然存在,你想要一个FIFO队列,还是一个添加/替换列表?