Spec-Zone.ru › Dart 2

dart:collection

Метод singleWhere

E singleWhere(
  1. bool test(
    1. E element
    ),
  2. {E orElse( )?}
)
inherited

Возвращает единственный элемент, который удовлетворяет test.

Проверяет элементы, чтобы определить, возвращает ли test(element) значение true. Если ровно один элемент удовлетворяет test, возвращается этот элемент. Если найдено более одного соответствующего элемента, выбрасывается StateError. Если соответствующий элемент не найден, возвращается результат orElse. Если orElse опущено, по умолчанию выбрасывается StateError.

Пример:

final numbers = <int>[2, 2, 10];
var result = numbers.singleWhere((element) => element > 5); // 10

Когда соответствующий элемент не найден, возвращается результат вызова orElse.

result = numbers.singleWhere((element) => element == 1,
    orElse: () => -1); // -1

Не должно быть более одного соответствующего элемента.

result = numbers.singleWhere((element) => element == 2); // Throws Error.

Реализация

E singleWhere(bool test(E element), {E Function()? orElse}) {
  int length = this.length;
  late E match;
  bool matchFound = false;
  for (int i = 0; i < length; i++) {
    E element = elementAt(i);
    if (test(element)) {
      if (matchFound) {
        throw IterableElementError.tooMany();
      }
      matchFound = true;
      match = element;
    }
    if (length != this.length) {
      throw ConcurrentModificationError(this);
    }
  }
  if (matchFound) return match;
  if (orElse != null) return orElse();
  throw IterableElementError.noElement();
}

© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.18.5/dart-collection/ListQueue/singleWhere.html

Spec-Zone.ru

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