Метод hashAll
- @Since("2.14")
Создаёт комбинированный код хэша для последовательности объектов.
Код хэша вычисляется для элементов в objects, даже если они null, путём численного комбинирования Object.hashCode каждого элемента в порядке итерации.
Результат hashAll([o]) не o.hashCode.
Пример:
class SomeObject {
final List<String> path;
SomeObject(this.path);
bool operator ==(Object other) {
if (other is SomeObject) {
if (path.length != other.path.length) return false;
for (int i = 0; i < path.length; i++) {
if (path[i] != other.path[i]) return false;
}
return true;
}
return false;
}
int get hashCode => Object.hashAll(path);
} Вычисленное значение будет согласованным, когда функция вызывается повторно с объектами, имеющими те же коды хэша в том же порядке во время выполнения одной программы.
Значение хэша, сгенерированное этой функцией, не гарантируется, что будет стабильным при различных запусках одной и той же программы или между кодом, выполняемым в разных изолятах одной и той же программы. Точный алгоритм может отличаться на разных платформах или в разных версиях библиотек платформы, и он может зависеть от значений, изменяющихся при каждом запуске программы.
Реализация
@Since("2.14")
static int hashAll(Iterable<Object?> objects) {
int hash = _hashSeed;
for (var object in objects) {
hash = SystemHash.combine(hash, object.hashCode);
}
return SystemHash.finish(hash);
}
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.18.5/dart-core/Object/hashAll.html