我有一个要求,即集合中的每个元素必须是唯一的,为此我使用了一个hashset。
但是我也希望根据First In First我们的订单从hashset中删除元素。但是,.NET中的默认Hashset DataStructure没有此行为。
是否有任何方法可以扩展hashset来实现此行为,还是应该使用其他一些数据结构。
答案 0 :(得分:5)
您可以将哈希集与队列配对。哈希集将为您提供O(1)复杂度,以测试该元素是否在队列中,并且队列将为您提供先进先出行为,同样在O(1)
中如果您正在存储引用类型,则使用这两个数据结构的额外空间开销将是最小的(引用数量的两倍)。
如果您正在使用值类型,自平衡二进制搜索树将为您提供O(log n)中的查找和插入,但允许您只存储每个元素的一个副本。
答案 1 :(得分:1)
扩展HS是不可能的。你可以试试OrderedDictionary。您将null
放入“值”并仅使用Key
。它可以通过Key
和插入顺序访问。遗憾的是它不是强类型的(它来自.NET 1.1时代......技术上它来自.NET 2.0,但很明显它是在创建泛型之前设计的。)
OrderedDictionary myOrderedDictionary = new OrderedDictionary();
myOrderedDictionary.Add("testKey1", null);
myOrderedDictionary.Add("testKey2", null);
myOrderedDictionary.Add("keyToDelete", null);
myOrderedDictionary.Add("testKey3", null);
// Remove first
myOrderedDictionary.RemoveAt(0);
// Check for existance
if (myOrderedDictionary.Contains("something")) {
}
答案 2 :(得分:0)
HashSet
在这里使用不正确。
Queue或其延伸将是您最好的选择。