Spec-Zone.ru › Dart 2

dart:core

Статический метод hashAllUnordered

  1. @Since("2.14")
int hashAllUnordered(
  1. Iterable<Object?> objects
)

Создаёт объединённый хеш-код для коллекции объектов.

Хеш-код вычисляется для элементов в objects, даже если они null, путём независимого от порядка числового объединения Object.hashCode каждого элемента.

Результат hashAllUnordered({o}) не является o.hashCode.

Пример:

bool setEquals<T>(Set<T> set1, Set<T> set2) {
  var hashCode1 = Object.hashAllUnordered(set1);
  var hashCode2 = Object.hashAllUnordered(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.19.6/dart-core/Object/hashAllUnordered.html

Spec-Zone.ru

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