我正在尝试在 C# 中实现 HashDictionary。但是,我遇到了一些问题。我不会发布我所有的代码,但在 HashDictionary 类中我有一个
HashDictionaryEnumerator : IEnumerator
。它的构造函数如下所示:
public HashDictionaryEnumerator(LinkedList<KeyValuePair<TKey, TValue>>[] buckets
{
this.buckets = buckets;
FirstNode = buckets[0].First;
CurrentNode = FirstNode;
}
我还有一个方法应该通过 has 哈希表,一次一个节点以及一个进入下一个存储桶的方法。由于那个 HashDictionary 类还没有准备好,我真的不能用它来尝试(我想?)。但我在另一个更简单的程序中使用它,它似乎工作......?
// Return true if there is another bucket (even if it's null)
// else return false
public bool NextBucket()
{
Index++;
if (Index < 100)
{
for (; buckets[Index] == null && Index < 100; Index++) { }
CurrentBucket = buckets[Index];
CurrentNode = CurrentBucket.First;
}
return Index < 100;
}
public bool MoveNext()
{
if (CurrentNode == null || CurrentNode.Next == null)
{
return NextBucket();
}
CurrentNode = CurrentNode.Next;
return CurrentNode != null;
}
无论如何,如上所述,上面的类在 HashDictionary 类中。我应该在那里实施
public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator() { }
我有另一个
GetEnumerator()
方法,看起来像这样。
IEnumerator IEnumerable.GetEnumerator()
{
return new HashDictionaryEnumerator(Buckets);
}
我想它可以工作,但是由于另一个 GetEnumerator() 没有实现,所以我也不能尝试那个。真的不知道如何实现另一个枚举器。
我也有一个
bool Contains(KeyValuePair<TKey, TValue> item)
。它应该查找是否存在密钥。但是,我不能比较像tmp.Value == item
这样的项目。
真的不知道要问什么,但不知道如何解决这个问题。也许是正确方向的暗示?此外,这是我在 HashDictionary 中的 Add() 方法。我不确定这是否是添加密钥的可行方法:
// Add a key to the hash dictionary
public void Add(TKey key, TValue value)
{
KeyValuePair<TKey, TValue> pair = new(key, value);
Buckets[GetIndex(key)] = new LinkedList<KeyValuePair<TKey, TValue>>();
Buckets[GetIndex(key)].AddLast(pair);
}
不知道我应该在这里写什么,但我已经完成了以上所有操作。