Метод hashAllUnordered
- @Since("2.14")
Создаёт комбинированный код хэша для коллекции объектов.
Код хэша вычисляется для элементов в objects, даже если они null, путём численного объединения Object.hashCode каждого элемента независимо от порядка.
Результат unorderedHashAll({o}) не o.hashCode.
Пример:
bool setEquals<T>(Set<T> set1, Set<T> set2) {
var hashCode1 = Object.unorderedHashAll(set1);
var hashCode2 = Object.unorderedHashAll(set2);
if (hashCode1 != hashCode2) return false;
// Compare elements ...
} Вычисленное значение будет согласованным при повторном вызове функции с объектами, имеющими одинаковые коды хэша во время выполнения одной программы, даже если объекты не обязательно находятся в одном и том же порядке.
Значение хэша, сгенерированное этой функцией, не гарантируется как стабильное при разных запусках одной и той же программы. Точный алгоритм может различаться между различными платформами или версиями библиотек платформы, а также может зависеть от значений, меняющихся при каждом запуске программы.
Реализация
@Since("2.14")
static int hashAllUnordered(Iterable<Object?> objects) {
int sum = 0;
int count = 0;
const int mask = 0x3FFFFFFF;
for (var object in objects) {
int objectHash = SystemHash.smear(object.hashCode);
sum = (sum + objectHash) & mask;
count += 1;
}
return SystemHash.hash2(sum, count);
}
© 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/hashAllUnordered.html