Spec-Zone.ru › Dart 2

dart:core

Метод hashAll

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

Spec-Zone.ru

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