Iterable абстрактный класс
Коллекция значений, или «элементов», к которым можно получить последовательный доступ.
К элементам итерируемого объекта можно получить доступ, получив Iterator с помощью свойства iterator, и используя его для перехода к значениям. Переход с помощью итератора осуществляется вызовом Iterator.moveNext, и если вызов возвращает true, итератор перешёл к следующему элементу, который затем доступен как Iterator.current. Если вызов возвращает false, элементов больше нет, и iterator.current возвращает null.
Вы можете создать более одного итератора из одного и того же Iterable. Каждый раз, когда iterator читается, он возвращает новый итератор, и разные итераторы могут проходить через элементы независимо, каждый из которых предоставляет доступ ко всем элементам итерируемого объекта. Итераторы одного и того же итерируемого объекта должны предоставлять одинаковые значения в том же порядке (если только базовая коллекция не изменяется между итерациями, что некоторые коллекции позволяют).
Вы также можете перебирать элементы Iterable, используя конструкцию цикла for-in, которая использует свойство iterator за кулисами. Например, вы можете перебрать все ключи Map, потому что ключи Map являются итерируемыми.
Map kidsBooks = {'Matilda': 'Roald Dahl',
'Green Eggs and Ham': 'Dr Seuss',
'Where the Wild Things Are': 'Maurice Sendak'};
for (var book in kidsBooks.keys) {
print('$book was written by ${kidsBooks[book]}');
}
Классы List и Set являются Iterable, как и большинство классов в библиотеке dart:collection.
Некоторые коллекции Iterable могут быть изменены. Добавление элемента в List или Set изменит содержащиеся в нём элементы, а добавление нового ключа в Map изменяет элементы Map.keys. Итераторы, созданные после изменения, будут предоставлять новые элементы, и могут или не сохранять порядок существующих элементов (например, HashSet может полностью изменить свой порядок при добавлении одного элемента).
Изменение коллекции во время её итерирования, как правило, не разрешено. Это приведёт к нарушению итерации, которая, как правило, сигнализируется с помощью исключения ConcurrentModificationError при следующем вызове Iterator.moveNext. Текущее значение свойства Iterator.current не должно изменяться в результате изменения коллекции, значение current было установлено предыдущим вызовом Iterator.moveNext.
Некоторые итерируемые объекты динамически вычисляют свои элементы каждый раз, когда они итерируются, как тот, который возвращается Iterable.generate или итерируемый объект, возвращаемый функцией генератора sync*. Если вычисление не зависит от других объектов, которые могут изменяться, то сгенерированная последовательность должна быть одинаковой каждый раз, когда она итерируется.
Члены Iterable, кроме iterator самих себя, работают, просматривая элементы итерируемого объекта. Это может быть реализовано путём прохождения через iterator, но некоторые классы могут иметь более эффективные способы получения результата (например, last или length для List, или contains для Set).
Методы, возвращающие другой Iterable (например, map и where), все являются ленивыми — они будут итерировать исходный (по мере необходимости) каждый раз, когда итерируется возвращаемый итерируемый объект, а не раньше.
Поскольку итерируемый объект может итерироваться более одного раза, не рекомендуется иметь обнаруживаемые побочные эффекты в итераторе. Для методов, таких как map и where, возвращаемый итерируемый объект будет выполнять функцию аргумента при каждой итерации, поэтому эти функции также не должны иметь побочных эффектов.
- Реализовано в
Конструкторы
- Iterable() const
- Iterable.empty() constfactory
-
Создаёт пустой итерируемый объект.
- Iterable.generate(int count, [ E generator(int index) ]) factory
-
Создаёт
Iterable, который динамически генерирует свои элементы.
Свойства
- first → E только для чтения
-
Возвращает первый элемент.
- isEmpty → bool только для чтения
-
Возвращает
true, если в этой коллекции нет элементов. - isNotEmpty → bool только для чтения
-
Возвращает true, если в этой коллекции есть хотя бы один элемент.
- iterator → Iterator<E> только для чтения
-
Возвращает новый
Iterator, который позволяет итерировать элементы этогоIterable. - last → E только для чтения
-
Возвращает последний элемент.
- length → int только для чтения
-
Возвращает количество элементов в
this. - single → E только для чтения
-
Проверяет, что в этом итерируемом объекте содержится только один элемент, и возвращает этот элемент.
- hashCode → int только для чтения, унаследованное
-
Хеш-код этого объекта.
- runtimeType → Type только для чтения, унаследованное
-
Представление типа объекта во время выполнения.
Операторы
- operator ==(
other) → bool унаследованное -
Оператор равенства.
Методы
- any(
bool f(E element)) → bool -
Проверяет, удовлетворяет ли какой-либо элемент этого итерируемого объекта
test. - contains(
Объект element) → bool -
Возвращает true, если коллекция содержит элемент, равный
element. - elementAt(
int index) → E -
Возвращает
index-й элемент. - every(
bool f(E element)) → bool -
Проверяет, удовлетворяет ли каждый элемент этого итерируемого объекта
test. - expand<T>(
Iterable<T> f(E element)) → Iterable<T> -
Расширяет каждый элемент этого итерируемого объекта на ноль или более элементов.
- firstWhere(
bool test(E element), { E orElse() }) → E -
Возвращает первый элемент, удовлетворяющий заданному предикату
test. - fold<T>(
T initialValue, T combine(T previousValue, E element)) → T -
Сводит коллекцию к единственному значению путем итеративного объединения каждого элемента коллекции с существующим значением
- forEach(
void f(E element)) → void -
Применяет функцию
fк каждому элементу этого набора в порядке итерации. - join(
[String separator = "" ]) → String -
Преобразует каждый элемент в строку и конкатенирует строки.
- lastWhere(
bool test(E element), { E orElse() }) → E -
Возвращает последний элемент, удовлетворяющий заданному предикату
test. - map<T>(
T f(E e)) → Iterable<T> -
Возвращает новый ленивый итерируемый объект с элементами, которые создаются путем вызова
fдля каждого элемента этогоIterableв порядке итерации. - reduce(
E combine(E value, E element)) → E -
Сводит коллекцию к единственному значению путем итеративного объединения элементов коллекции с использованием предоставленной функции.
- singleWhere(
bool test(E element)) → E -
Возвращает единственный элемент, удовлетворяющий
test. - skip(
int count) → Iterable<E> -
Возвращает итерируемый объект, который предоставляет все элементы, кроме первых
countэлементов. - skipWhile(
bool test(E value)) → Iterable<E> -
Возвращает
Iterable, который пропускает ведущие элементы, покаtestвыполняется. - take(
int count) → Iterable<E> -
Возвращает ленивый итерируемый объект первых
countэлементов этого итерируемого объекта. - takeWhile(
bool test(E value)) → Iterable<E> -
Возвращает ленивый итерируемый объект ведущих элементов, удовлетворяющих
test. - toList(
{bool growable: true }) → Список<E> -
Создает список, содержащий элементы этого итерируемого объекта.
- toSet(
) → Множество<E> -
Создает множество, содержащее те же элементы, что и этот итерируемый объект.
- toString(
) → String -
Возвращает строковое представление (части) элементов
this. - where(
bool test(E element)) → Iterable<E> -
Возвращает новый ленивый итерируемый объект со всеми элементами, которые удовлетворяют предикату
test. - noSuchMethod(
Invocation invocation) → dynamic inherited -
Вызывается при обращении к несуществующему методу или свойству.
© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-core/Iterable-class.html