Spec-Zone.ru › Dart 2

dart:collection

Метод singleWhere

E singleWhere(
  1. bool test(
    1. E element
    ),
  2. {E orElse( )?}
)
унаследовано

Возвращает единственный элемент, удовлетворяющий 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.19.6/dart-collection/ListQueue/singleWhere.html

Spec-Zone.ru

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