Spec-Zone.ru › Dart 2

dart:core

Метод hashAllUnordered

  1. @Since("2.14")
int hashAllUnordered(
  1. Iterable<Object?> objects
)
@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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API