加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用布尔数组作为自定义字典键

发布时间:2020-12-15 04:35:16 所属栏目:百科 来源:网络整理
导读:我试图在C#中创建一个使用布尔数组作为其键的字典. Dictionarybool[],string bool数组的固定长度为1000,并且长度都相同.我遇到了哈希码的问题,并且由于数组的长度,’exclusive或’的常用方法没有那么多意义. StackOverflow上的类似问题通过GetHashCode方法中
我试图在C#中创建一个使用布尔数组作为其键的字典.
Dictionary<bool[],string>

bool数组的固定长度为1000,并且长度都相同.我遇到了哈希码的问题,并且由于数组的长度,’exclusive或’的常用方法没有那么多意义.

StackOverflow上的类似问题通过GetHashCode方法中的“exclusive or”来解决.我认为这不适用于这种情况.我想用它作为:

Dictionary<bool[],string> myDict = 
             new Dictionary<bool[],string>(EqualityComparer);

其中EquaityComparer做的事情如下:

public class EqualityComparer : IEqualityComparer<bool[]>
    {
        public bool Equals(bool[] x,bool[] y)
        {
            return x.SequenceEqual(y);
        }

        public int GetHashCode(bool[] x)
        {
            // this part doesn't work correctly
            int hc = x.GetHashCode();
            return hc;
        }
    }

当然,关于bool数组的所有常见问题都是可变的,任何派生密钥的大小与性能相关都适用于此……虽然我没有解决方案.

解决方法

您的Equals和HashCode都不正确.

大概你希望使用SequenceEqual比较数组是否相等,或者是一个简单的for循环.

要计算哈希码,您可以使用任何标准方法.非常重要的是,如果两个项目相等,那么它们必须具有相同的散列.

public int GetHashCode(bool[] x)
{
    int result = 29;
    foreach (bool b in x)
    {
        if (b) { result++; }
        result *= 23;
    }
    return result;
}

有关

> Guidelines and rules for GetHashCode

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读