C# 用c语言实现字典#

C# 用c语言实现字典#,c#,dictionary,implementation,hashcode,C#,Dictionary,Implementation,Hashcode,在一次采访中,我被要求实现字典。如何实现它?我曾尝试使用数组将索引作为键来实现它。但无法实现通用字典。有很多方法可以实现像字典这样的类 我将描述一个简单的例子 创建存储所有内容的类和列表。 [编辑]我们将比较变量T1的值,因此需要一个限制,其中T1:IEquatable 实现一个赋值函数。 [编辑]也使用Equals 就这样 当然,这不是高度优化的,并且没有多少有用的功能。如果你想知道如何编写更有用的词典,我建议你阅读 ,它包含在.NET Core中 源代码:我会拒绝,因为使用系统的实现总是更好

在一次采访中,我被要求实现字典。如何实现它?我曾尝试使用数组将索引作为键来实现它。但无法实现通用字典。

有很多方法可以实现像
字典这样的类
我将描述一个简单的例子

  • 创建存储所有内容的类和列表。
    [编辑]我们将比较变量T1的值,因此需要一个限制,其中T1:IEquatable
  • 实现一个赋值函数。
    [编辑]也使用
    Equals
  • 就这样

    当然,这不是高度优化的,并且没有多少有用的功能。如果你想知道如何编写更有用的词典,我建议你阅读
    ,它包含在.NET Core中

    源代码:我会拒绝,因为使用系统的实现总是更好(“始终使用系统排序”)。根据设计,每个字典成员都有一个指向自身的键。与基于位置顺序的数组成员不同。此代码无法编译,存在多个错误。如果你能修好就好了。谢谢!我已经修复了所有的编译器错误。我再次确认,在没有编辑器的情况下编写代码会让我产生bug。
    class MyDictionary<T1, T2> where T1 : IEquatable<T1>
    {
        private List<(T1 key, T2 val)> m_internal_data;
    }
    
    public T2 Find(T1 key)
    {
        // Looking for a content.
        foreach (var content in m_internal_data)
        {
            if (content.key.Equals(key))
            {
                return content.val;
            }
        }
        // It reaches here when there is no content which has the same key.
        // Then, I recommend to throw an exception or return a default value of T2.
        return default(T2);
    }
    
    public void Store(T1 key, T2 val)
    {
        // Looking for a content. If exists, store a new value.
        for (int i = 0; i < m_internal_data.Count; i++)
        {
            if (m_internal_data[i].key.Equals(key))
            {
                var content = m_internal_data[i];
                content.val = val;
                m_internal_data[i] = content;
                return;
            }
        }
        // Create a new key.
        m_internal_data.Add((key, val));
    }
    
    public T2 this[T1 key]
    {
        get => Find(key);
        set
        {
            Store(key, value);
        }
    }