我需要一个数据结构,它是一种特殊类型的队列。我想要的是,如果我的队列的一个实例曾经包含一个对象 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/