Iter[A: A]
Класс-обёртка, содержащий методы для модификации итераторов.
class ref Iter[A: A] is Iterator[A] ref
Реализует
- Итератор[A] ref
Конструкторы
create
new ref create( iter: Iterator[A] ref) : Iter[A] ref^
Параметры
- iter: Итератор[A] ref
Возвращает
- Iter[A] ref^
maybe
new ref maybe( value: (A | None val)) : Iter[A] ref^
Параметры
- value: (A | None val)
Возвращает
- Iter[A] ref^
chain
Принимает итератор итераторов и возвращает Iter, содержащий элементы первого, затем второго и так далее.
Пример
let xs = [as I64: 1; 2].values() let ys = [as I64: 3; 4].values() Iter[I64].chain([xs; ys].values())
1 2 3 4
new ref chain( outer_iterator: Iterator[Iterator[A] ref] ref) : Iter[A] ref^
Параметры
Возвращает
- Iter[A] ref^
repeat_value
Создаёт итератор, который бесконечно возвращает заданное значение.
Пример
Iter[U32].repeat_value(7)
7 7 7 7 7 7 7 7 7 ...
new ref repeat_value( value: A) : Iter[A] ref^
Параметры
- value: A
Возвращает
- Iter[A] ref^
Публичные функции
has_next
fun ref has_next() : Bool val
Возвращает
- Bool val
next
fun ref next() : A ?
Возвращает
- A ?
next_or
Возвращает следующее значение или заданное значение по умолчанию.
Пример
let x: (U64 | None) = 42 Iter[U64].maybe(x).next_or(0)
42
fun ref next_or( default: A) : A
Параметры
- default: A
Возвращает
- A
map_stateful[B: B]
Позволяет выполнять трансформацию элементов из итератора с состоянием, аналогично map.
fun ref map_stateful[B: B](
f: {ref(A!): B^ ?}[A, B] ref)
: Iter[B] ref^
Параметры
- f: {ref(A!): B^ ?}[A, B] ref
Возвращает
- Iter[B] ref^
filter_stateful
Позволяет фильтровать элементы на основе адаптера с состоянием, аналогично filter.
fun ref filter_stateful(
f: {ref(A!): Bool ?}[A] ref)
: Iter[A!] ref^
Параметры
- f: {ref(A!): Bool ?}[A] ref
Возвращает
- Iter[A!] ref^
filter_map_stateful[B: B]
Позволяет выполнять модификацию элементов из потока итератора с состоянием, аналогично filter_map.
fun ref filter_map_stateful[B: B](
f: {ref(A!): (B^ | None) ?}[A, B] ref)
: Iter[B] ref^
Параметры
- f: {ref(A!): (B^ | None) ?}[A, B] ref
Возвращает
- Iter[B] ref^
all
Возвращает false, если хотя бы одно значение итератора не соответствует предикату f. Данный метод прерывается при первом значении, где предикат возвращает false, в противном случае возвращает true.
Примеры
Iter[I64]([2; 4; 6].values())
.all({(x) => (x % 2) == 0 })
true
Iter[I64]([2; 3; 4].values())
.all({(x) => (x % 2) == 0 })
false
fun ref all(
f: {(A!): Bool ?}[A] box)
: Bool val
Параметры
- f: {(A!): Bool ?}[A] box
Возвращает
- Bool val
any
Возвращает true, если хотя бы одно значение итератора соответствует предикату f. Данный метод прерывается при первом значении, где предикат возвращает true, в противном случае возвращает false.
Примеры
Iter[I64]([2; 4; 6].values())
.any({(I64) => (x % 2) == 1 })
false
Iter[I64]([2; 3; 4].values())
.any({(I64) => (x % 2) == 1 })
true
fun ref any(
f: {(A!): Bool ?}[A] box)
: Bool val
Параметры
- f: {(A!): Bool ?}[A] box
Возвращает
- Bool val
collect[optional B: Последовательность[A!] ref]
Добавляет каждое значение из итератора в коллекцию coll.
Пример
Iter[I64]([1; 2; 3].values()) .collect(Array[I64](3))
[1, 2, 3]
fun ref collect[optional B: Seq[A!] ref]( coll: B) : B^
Параметры
- coll: B
Возвращает
- B^
count
Возвращает количество значений в итераторе.
Пример
Iter[I64]([1; 2; 3].values()) .count()
3
fun ref count() : USize val
Возвращает
- USize val
cycle
Бесконечно циклически возвращает значения из итератора.
ПРЕДУПРЕЖДЕНИЕ: Значения из исходного итератора кешируются, поэтому входной итератор должен быть конечным.
Пример
Iter[I64]([1; 2; 3].values()) .cycle()
1 2 3 1 2 3 1 2 3 ...
fun ref cycle() : Iter[A!] ref^
Возвращает
- Iter[A!] ref^
enum[optional B: (Вещественный[B] val & (I8 val | I16 val | I32 val | I64 val | I128 val | ILong val | ISize val | U8 val | U16 val | U32 val | U64 val | U128 val | ULong val | USize val | F32 val | F64 val))]
Итератор, который возвращает текущий счёт итерации, а также следующее значение из итератора.
Пример
Iter[I64]([1; 2; 3].values()) .enum()
(0, 1) (1, 2) (2, 3)
fun ref enum[optional B: (Real[B] val & (I8 val | I16 val | I32 val |
I64 val | I128 val | ILong val |
ISize val | U8 val | U16 val |
U32 val | U64 val | U128 val |
ULong val | USize val | F32 val |
F64 val))]()
: Iter[(B , A)] ref^
Возвращает
- Iter[(B , A)] ref^
filter
Возвращает итератор, который возвращает только элементы, соответствующие предикату f.
Пример
Iter[I64]([1; 2; 3; 4; 5; 6].values())
.filter({(x) => (x % 2) == 0 })
2 4 6
fun ref filter(
f: {(A!): Bool ?}[A] box)
: Iter[A!] ref^
Параметры
- f: {(A!): Bool ?}[A] box
Возвращает
- Iter[A!] ref^
find
Возвращает n-ое значение в итераторе, которое удовлетворяет предикату f.
Примеры
Iter[I64]([1; 2; 3].values())
.find({(x) => (x % 2) == 0 })
2
Iter[I64]([1; 2; 3; 4].values())
.find({(x) => (x % 2) == 0 }, 2)
4
fun ref find(
f: {(A!): Bool ?}[A] box,
n: USize val = 1)
: A! ?
Параметры
- f: {(A!): Bool ?}[A] box
- n: USize val = 1
Возвращает
- A! ?
filter_map[B: B]
Возвращает итератор, который применяет f к каждому элементу. Если None возвращается, итератор попробует снова, применив f к следующему элементу. В противном случае возвращается значение типа B.
Пример
Iter[I64]([as I64: 1; -2; 4; 7; -5])
.filter_map[USize](
{(i: I64): (USize | None) => if i >= 0 then i.usize() end })
1 4 7
```pony
fun ref filter_map[B: B](
f: {(A!): (B^ | None) ?}[A, B] box)
: Iter[B] ref^
Параметры
- f: {(A!): (B^ | None) ?}[A, B] box
Возвращает
- Iter[B] ref^
flat_map[B: B]
Возвращает итератор по значениям итераторов, полученных из применения заданной функции.
Пример
Iter[String](["alpha"; "beta"; "gamma"])
.flat_map[U8]({(s: String): Iterator[U8] => s.values() })
a l p h a b e t a g a m m a
fun ref flat_map[B: B](
f: {(A!): Iterator[B] ?}[A, B] box)
: Iter[B] ref^
Параметры
- f: {(A!): Iterator[B] ?}[A, B] box
Возвращает
- Iter[B] ref^
fold[B: B]
Применяет функцию к каждому элементу, производя накопленное значение.
Пример
Iter[I64]([1; 2; 3].values())
.fold[I64](0, {(sum, x) => sum + x })
6
fun ref fold[B: B](
acc: B,
f: {(B, A!): B^}[A, B] box)
: B^
Параметры
- acc: B
- f: {(B, A!): B^}[A, B] box
Возвращает
- B^
fold_partial[B: B]
Частичная версия fold.
fun ref fold_partial[B: B](
acc: B,
f: {(B, A!): B^ ?}[A, B] box)
: B^ ?
Параметры
- acc: B
- f: {(B, A!): B^ ?}[A, B] box
Возвращает
- B^ ?
Возвращает последнее значение итератора.
Пример
Iter[I64]([1; 2; 3].values()) .last()
3
fun ref last() : A ?
Возвращает
- A ?
map[B: B]
Возвращает итератор, где значение каждого элемента — результат применения заданной функции к значению в исходном итераторе.
Пример
Iter[I64]([1; 2; 3].values())
.map[I64]({(x) => x * x })
1 4 9
fun ref map[B: B](
f: {(A!): B^ ?}[A, B] box)
: Iter[B] ref^
Параметры
- f: {(A!): B^ ?}[A, B] box
Возвращает
- Iter[B] ref^
nth
Возвращает n-ое значение итератора.
Пример
Iter[I64]([1; 2; 3].values()) .nth(2)
2
fun ref nth( n: USize val) : A ?
Параметры
- n: USize val
Возвращает
- A ?
run
Перебирает значения итератора без цикла for. Функция on_error будет вызвана, если метод итератора has_next возвращает true, но его метод next вызывает ошибку.
Пример
Iter[I64]([1; 2; 3].values())
.map[None]({(x) => env.out.print(x.string()) })
.run()
1 2 3
fun ref run(
on_error: {ref()}[A] ref = lambda)
: None val
Параметры
- on_error: {ref()}[A] ref = lambda
Возвращает
- None val
skip
Пропускает первые n значений итератора.
Пример
Iter[I64]([1; 2; 3; 4; 5; 6].values()) .skip(3)
4 5 6
Iter[I64]([1; 2; 3].values()) .skip(3) .has_next()
false
fun ref skip( n: USize val) : Iter[A] ref^
Параметры
- n: USize val
Возвращает
- Iter[A] ref^
skip_while
Пропускает значения итератора, пока предикат f возвращает true.
Пример
Iter[I64]([1; 2; 3; 4; 5; 6].values())
.skip_while({(x) => x < 4 })
4 5 6
fun ref skip_while(
f: {(A!): Bool ?}[A] box)
: Iter[A!] ref^
Параметры
- f: {(A!): Bool ?}[A] box
Возвращает
- Iter[A!] ref^
take
Возвращает итератор для первых n элементов.
Пример
Iter[I64]([1; 2; 3; 4; 5; 6].values()) .take(3)
1 2 3
fun ref take( n: USize val) : Iter[A] ref^
Параметры
- n: USize val
Возвращает
- Iter[A] ref^
take_while
Возвращает итератор, который возвращает значения, пока предикат f возвращает true. Этот итератор прерывается в первый раз, когда f возвращает false или вызывает ошибку.
Пример
Iter[I64]([1; 2; 3; 4; 5; 6].values())
.take_while({(x) => x < 4 })
1 2 3
fun ref take_while(
f: {(A!): Bool ?}[A] box)
: Iter[A!] ref^
Параметры
- f: {(A!): Bool ?}[A] box
Возвращает
- Iter[A!] ref^
zip[B: B]
Комбинирует два итератора так, что каждый вызов next() возвращает кортеж с следующим значением первого итератора и следующим значением второго итератора. Количество возвращаемых элементов — минимальное из количества элементов, возвращаемых двумя итераторами.
Пример
Iter[I64]([1; 2].values()) .zip[I64]([3; 4].values())
(1, 3) (2, 4)
fun ref zip[B: B]( i2: Iterator[B] ref) : Iter[(A , B)] ref^
Параметры
- i2: Iterator[B] ref
Возвращает
- Iter[(A , B)] ref^
zip2[B: B, C: C]
Комбинирует три итератора так, что каждый вызов next() возвращает кортеж с следующим значением первого итератора, следующим значением второго итератора и значением третьего итератора. Количество возвращаемых элементов — минимальное из количества элементов, возвращаемых тремя итераторами.
fun ref zip2[B: B, C: C]( i2: Iterator[B] ref, i3: Iterator[C] ref) : Iter[(A , B , C)] ref^
Параметры
Возвращает
- Iter[(A , B , C)] ref^
zip3[B: B, C: C, D: D]
Комбинирует четыре итератора так, что каждый вызов next() возвращает кортеж со следующим значением каждого из итераторов. Количество возвращаемых элементов — минимальное из количества элементов, возвращаемых итераторами.
fun ref zip3[B: B, C: C, D: D]( i2: Iterator[B] ref, i3: Iterator[C] ref, i4: Iterator[D] ref) : Iter[(A , B , C , D)] ref^
Параметры
Возвращает
- Iter[(A , B , C , D)] ref^
zip4[B: B, C: C, D: D, E: E]
Комбинирует пять итераторов так, что каждый вызов next() возвращает кортеж со следующим значением каждого из итераторов. Количество возвращаемых элементов — минимальное из количества элементов, возвращаемых итераторами.
fun ref zip4[B: B, C: C, D: D, E: E]( i2: Iterator[B] ref, i3: Iterator[C] ref, i4: Iterator[D] ref, i5: Iterator[E] ref) : Iter[(A , B , C , D , E)] ref^
Параметры
Возвращает
- Iter[(A , B , C , D , E)] ref^
© 2016-2020, The Pony Developers
© 2014-2015, Causality Ltd.
Licensed under the BSD 2-Clause License.
https://stdlib.ponylang.io/itertools-Iter