gpt4 book ai didi

dart - 在 Dart 中覆盖哈希码的好方法是什么?

转载 作者:行者123 更新时间:2023-12-03 10:26:54 26 4
gpt4 key购买 nike

我发现自己想要覆盖对象的 hashcode 和 ==,我想知道是否有最佳实践来实现取决于多个属性的 hashcode,而且似乎有一些 Dart 特定的注意事项。

最简单的答案是将所有属性的哈希值异或在一起,这可能还不错。 Dart Up and Running 中还有一个示例,地址为 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 位。

对于我的应用程序,集合的预期大小非常小,几乎可以做任何事情,但我很惊讶没有看到一般情况下的标准配方。有没有人有这方面的经验或丰富的经验?

最佳答案

quiver package提供辅助函数 hash2 , hash3等,简化了实现 hashCode 的任务,在一定程度上保证它在 Dart VM 下和编译为 JavaScript 时正常工作。

import 'package:quiver/core.dart';

class Person {
String name;
int age;

Person(this.name, this.age);

bool operator ==(o) => o is Person && name == o.name && age == o.age;
int get hashCode => hash2(name.hashCode, age.hashCode);
}
另见 this post稍长的讨论。

关于dart - 在 Dart 中覆盖哈希码的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20577606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com