我发现自己想要为一个对象覆盖 hashcode 和 = = ,我想知道是否存在实现依赖于多个属性的 hashcode 的最佳实践,而且似乎存在一些特定于 Dart 的注意事项。
最简单的答案是将所有属性的哈希值异或放在一起,这可能也不是太糟糕。还有一个例子在飞驰和运行在 https://www.dartlang.org/docs/dart-up-and-running/contents/ch03.html
// Override hashCode using strategy from Effective Java, Chapter 11.
int get hashCode {
int result = 17;
result = 37 * result + firstName.hashCode;
result = 37 * result + lastName.hashCode;
return result;
}
但是它似乎期望截断整数语义,并且在 Dart 中,JS 整数的范围过大似乎不利于散列。
我们也可以这样做,每次操作后只截断到32位。
对于我的应用程序,预期的集合大小非常小,几乎任何东西都可以,但是我很惊讶没有看到通用情况的标准配方。有人有这方面的经验或丰富经验吗?