【问题标题】:Is HashCode.Combine commutative? [closed]HashCode.Combine 是可交换的吗? [关闭]
【发布时间】:2020-10-30 09:47:36
【问题描述】:

具体来说是

HashCode.Combine<T1,T2>(T1, T2)

可交换? IE。是真的吗

HashCode.Combine(a, b) == HashCode.Combine(b, a)

对于 任何 ab?

【问题讨论】:

标签: c# hashcode


【解决方案1】:

为什么不进行一个简单的实验,例如

public static void Experiment() {
  for (int i = 0; i < 100; ++i)
    for (int j = 0; j < 100; ++j) {
      int a = HashCode.Combine(i, j);
      int b = HashCode.Combine(j, i);

      if (a != b) {
        Console.Write($"Combine({i}, {j}) = {a} != {b} = Combine({j}, {i})");

        return; 
      }
  }

  Console.Write("Seems to be commutative");  
}

结果:

Combine(0, 1) = -839320321 != 864340100 = Combine(1, 0)

所以Hash.Combine(当前实现,.Net Core 3.1)不是可交换的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 2015-04-05
    相关资源
    最近更新 更多