c# - 在 C# 中,是否存在一个对象在其生命周期内只能保存一次的队列?

标签 c# data-structures queue

我需要一个数据结构,它是一种特殊类型的队列。我想要的是,如果我的队列的一个实例曾经包含一个对象 X,那么在这个实例中应该不可能再次将 X 入队。如果用 X 调用,入队方法应该什么也不做,比如尝试向 HashSet 添加重复值。

示例用法:

MyQueue<int> queue = new MyQueue<int>(); 
queue.Enqueue(5); 
queue.Enqueue(17); 
queue.Enqueue(28); 
queue.Enqueue(17); 
int firstNumber = queue.Dequeue(); 
queue.Enqueue(5); 
queue.Enqueue(3); 

List<int> queueContents = queue.ToList(); //this list should contain {17, 28, 3}

我在 MSDN 上四处寻找,但找不到这样的类。它存在吗,还是我必须自己实现?

我想我也可以使用不同的数据结构,但访问始终是 FIFO,所以我认为队列是最有效的。另外,我不知道有任何其他结构可以提供这种“实例生命周期内的唯一性”功能。

最佳答案

我会做类似的事情:

class UniqueQueue<T>
{
    private readonly Queue<T> queue = new Queue<T>();
    private HashSet<T> alreadyAdded = new HashSet<T>();

    public virtual void Enqueue(T item)
    {
        if (alreadyAdded.Add(item)) { queue.Enqueue(item); }
    }
    public int Count { get { return queue.Count; } }

    public virtual T Dequeue()
    {
        T item = queue.Dequeue();
        return item;
    }
}

请注意,大部分代码是从 This Thread 借来的.

关于c# - 在 C# 中,是否存在一个对象在其生命周期内只能保存一次的队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19956234/

相关文章:

c++ - 如何迭代priority_queue?

c# - 当您不使用异常来控制流程时,代码看起来如何?

c# - 线栅格化 : Cover all pixels, 与线渐变无关?

regex - 在具有更好时间复杂度的数组中查找子字符串(最好在 perl 中)

c - 在 C 中搜索数据结构数组的成员

c - C 中的 bool 值队列

c# - 如何获取应用程序数据文件夹?

c# - Oracle Command 的类型转换问题

javascript - 需要帮助理解将 BST 转换为排序数组的算法中的错误

.NET 快速持久队列