如何使用具有超过8个值的System.HashCode.Combine?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用具有超过8个值的System.HashCode.Combine?相关的知识,希望对你有一定的参考价值。

。NET Standard 2.1 / .NET Core 3introduceSystem.HashCode,可以将字段和值快速组合为哈希码,而不必关心基础实现。

但是,它仅提供System.HashCode方法重载,最多8个值。如果我的班级有9个值(3x3矩阵)或什至16个值(4x4矩阵)怎么办?

我应该简单地将两个Combine调用加起来,在每个调用中传递尽可能多的值吗?

Combine

看着public override int GetHashCode() => HashCode.Combine(M11, M12, M13, M21, M22, M23, M31, M32) + HashCode.Combine(M33); ,我不能完全争辩这是否有我不知道的含义。

答案

source中所述,简单地累加由连续的System.HashCode documentation you actually linked yourself调用创建的哈希码是not解决方案。

静态System.HashCode方法最多只能允许8个值,但这似乎只是舒适方法,这是正确的。要组合8个以上的值,您必须求助于实例化Combine并像这样使用它:

Combine

这的确使我感到奇怪,为什么没有HashCode构造函数接受public override int GetHashCode() HashCode hash = new HashCode(); hash.Add(M11); hash.Add(M12); hash.Add(M13); hash.Add(M21); hash.Add(M22); hash.Add(M23); hash.Add(M31); hash.Add(M32); hash.Add(M33); return hash.ToHashCode(); ,所以您可以在一行中完成所有操作,但是可能有一些原因我没有很快想到。

仍然比自己完成所有内部工作要好得多! :-)

以上是关于如何使用具有超过8个值的System.HashCode.Combine?的主要内容,如果未能解决你的问题,请参考以下文章

如何在mvc中传递具有2个值的查询字符串

Postgresql - 超过 3000 个值的 IN 子句优化

使用张量流服务预测图像-“错误”:“重塑的输入是具有 10000 个值的张量

在 str.split 操作后创建具有最后 2 个值的新列

SQL:将查询输出更改为具有两个单独的列,而不是具有 2 个值的行

如何使用具有超过 2^31 个观测值的 biglm