在 C# 中实现 HashDictionary

问题描述 投票:0回答:0

我正在尝试在 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);
}

不知道我应该在这里写什么,但我已经完成了以上所有操作。

c# hash
© www.soinside.com 2019 - 2024. All rights reserved.