Iterable< E> класс
Коллекция значений, или "элементов", к которым можно получить последовательный доступ.
К элементам итерируемого объекта можно получить доступ, получив Iterator с помощью геттера iterator и используя его для перехода к значениям. Переход с помощью итератора выполняется путём вызова Iterator.moveNext, и если вызов возвращает true, итератор переместился к следующему элементу, который затем доступен как Iterator.current. Если вызов возвращает false, больше элементов нет. Значение Iterator.current должно использоваться только тогда, когда последний вызов Iterator.moveNext вернул true. Если оно используется до первого вызова Iterator.moveNext для итератора или после вызова, вернувшего false или бросившего исключение, чтение Iterator.current может вызвать исключение или вернуть произвольное значение.
Вы можете создать более одного итератора из одного и того же Iterable. Каждый раз, когда iterator читается, он возвращает новый итератор, и разные итераторы могут перебираться независимо, каждый из которых предоставляет доступ ко всем элементам итерируемого объекта. Итераторы одного и того же итерируемого объекта *должны* предоставлять одинаковые значения в том же порядке (если только основная коллекция не изменяется между итерациями, что допускается для некоторых коллекций).
Вы также можете перебирать элементы Iterable с помощью конструкции цикла for-in, которая использует геттер iterator в фоновом режиме. Например, вы можете перебрать все ключи Map, потому что ключи Map итерируемы.
var 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 только для чтения
- Возвращает первый элемент.
- hashCode → int только для чтения, унаследованный
- Хэш-код этого объекта.
- isEmpty → bool только для чтения
- Является ли эта коллекция пустой.
- isNotEmpty → bool только для чтения
- Содержит ли эта коллекция хотя бы один элемент.
- iterator → Iterator<
E> только для чтения - Возвращает новый
Iterator, позволяющий перебрать элементы этогоIterable. - last → E только для чтения
- Возвращает последний элемент.
- length → int только для чтения
- Возвращает количество элементов в this.
- runtimeType → Type только для чтения, унаследованный
- Представление типа объекта во время выполнения.
- single → E только для чтения
- Проверяет, что этот итерируемый объект содержит только один элемент, и возвращает этот элемент.
Методы
- any(
bool test(E element)) → bool - Проверяет, удовлетворяет ли какой-либо элемент этого итерируемого объекта
test. - cast<
R>( ) → Iterable< R> - Предоставляет представление этого итерируемого объекта как итерируемого объекта экземпляров
R. - contains(
Object? element) → bool - Определяет, содержит ли коллекция элемент, равный
element. - elementAt(
int index) → E - Возвращает
index-й элемент. - every(
bool test(E element)) → bool - Проверяет, удовлетворяет ли каждый элемент этого итерируемого объекта
test. - expand<
T>( Iterable< T> toElements(E element)) → Iterable< T> - Расширяет каждый элемент этого итерируемого объекта в ноль или более элементов.
- firstWhere(
bool test(E element), {E orElse()?}) → E - Возвращает первый элемент, удовлетворяющий заданному предикату
test. - fold<
T>( T initialValue, T combine(T previousValue, E element)) → T - Сводит коллекцию к одному значению, поочередно комбинируя каждый элемент коллекции с существующим значением
- followedBy(
Iterable< E> other) → Iterable< E> - Возвращает ленивое объединение этого итерируемого объекта и
other. - forEach(
void action(E element)) → void - Вызывает
actionдля каждого элемента этого итерируемого объекта в порядке итерации. - join(
[String separator = ""]) → String - Преобразует каждый элемент в строку и конкатенирует строки.
- lastWhere(
bool test(E element), {E orElse()?}) → E - Возвращает последний элемент, удовлетворяющий заданному предикату
test. - map<
T>( T toElement(E e)) → Iterable< T> - Текущие элементы этого итерируемого объекта, измененные посредством
toElement. - noSuchMethod(
Invocation invocation) → dynamic inherited - Вызывается при обращении к несуществующему методу или свойству.
- reduce(
E combine(E value, E element)) → E - Сводит коллекцию к одному значению, поочередно комбинируя элементы коллекции с помощью предоставленной функции.
- singleWhere(
bool test(E element), {E orElse()?}) → 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}) → List< E> - Создаёт список, содержащий элементы этого итерируемого объекта.
- toSet(
) → Set< E> - Создаёт множество, содержащее те же элементы, что и этот итерируемый объект.
- toString(
) → String override - Возвращает строковое представление (части) элементов
this. - where(
bool test(E element)) → Iterable< E> - Возвращает новый ленивый итерируемый объект со всеми элементами, удовлетворяющими предикату
test. - whereType<
T>( ) → Iterable< T> - Возвращает новый ленивый итерируемый объект со всеми элементами, имеющими тип
T.
Операторы
- operator ==(
Object other) → bool inherited - Оператор равенства.
Статические методы
- castFrom<
S, T>( Iterable< S> source) → Iterable< T> - Адаптирует
sourceдля использования какIterable<T>.
© 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/Iterable-class.html