如何查明Queue是否包含其他位置的最后一项?

时间:2012-02-15 21:45:44

标签: c# collections

让我们有一个队列和一个最后排队的项目。找出项目是否(不)在队列中的另一个位置的最有效方法是什么?

如果项目有帮助,可以将该项目记住到另一个变量中。

2 个答案:

答案 0 :(得分:4)

只需保留 HashSet<T> Dictionary<T,int>并以这种方式记录您的项目 - 当您将队列中的项目排入队列时,您可以增加该项目的计数(或添加如果还没有出现在字典中 - 你可以在添加新项目之前使用dictionary.ContainsKey() 进行检查以查看项目是否已添加,或检索项目的计数(&gt ;在这种情况下,插入后为= 2) - 这当然要求项目的正确定义相同。

同样,当您从队列中出列项目时,您必须减少字典中项目的计数,并在计数达到零时将其删除。

这种方法为O(1)查找时间增加了额外的内存成本。

答案 1 :(得分:0)

我终于找到了!我希望它也有助于其他人。

此任务的更好收藏是LinkedList

bool findNotLast<T>(T item, LinkedList<T> list) {
    return list.Count>1 && list.Find(item) != list.Last;
}