C# .net FIFO“;“排队”;结合最后一个已知的主题

C# .net FIFO“;“排队”;结合最后一个已知的主题,c#,.net,collections,C#,.net,Collections,查找任何现有的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.A

查找任何现有的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

等等

注意-根据上述规则,添加/处理项目/主题的顺序很重要


想知道这是否是一个已知的场景,并且可能已经有一个现有的实现了

为了一个好的线程安全队列实现,请从v4开始检查框架的内置


话虽如此,您要求的行为并不是严格意义上的队列,它更像是一个列表,其中Add()被覆盖以添加或替换等效的现有项。所以问题仍然是,您想要一个FIFO队列,还是一个添加/替换列表

您要查找的是优先级队列。您的需求略有不同,因为它使用字母而不是整数作为优先级,但概念是相同的。请参见答案和

它有点重,但我以前为此使用过队列字典(当然,通过实现自定义字典来改进API)。不过,这对你来说可能是值得的。我不确定我是否理解你的检索背后的逻辑?你能详细说明一下你期望结果如何以你的解释方式实现吗?@JustinPihony在fin和其他领域有很多用途@M.Babcock项目的顺序很重要,因此队列字典在这种情况下不起作用,需要更新Q@Kumar-某个特定主题的重要性顺序或整体顺序?两者都有或两者都没有,或两者的组合!顺序很重要,所以它是一个Q,如果一个新的项目与相同的主题到达旧的可以被丢弃,在金融世界中的许多用途看起来很有趣,将采取更深入的研究使用IComparable与说字典!