On this page
iterators
Iterators
-
iterator items[T: not char](a: openArray[T]): lent2 T {...}{.inline.} -
Iterates over each item of
a. Source Edit -
iterator items[T: char](a: openArray[T]): T {...}{.inline.} -
Iterates over each item of
a. Source Edit -
iterator mitems[T](a: var openArray[T]): var T {...}{.inline.} -
Iterates over each item of
aso that you can modify the yielded value. Source Edit -
iterator items[IX, T](a: array[IX, T]): T {...}{.inline.} -
Iterates over each item of
a. Source Edit -
iterator mitems[IX, T](a: var array[IX, T]): var T {...}{.inline.} -
Iterates over each item of
aso that you can modify the yielded value. Source Edit -
iterator items[T](a: set[T]): T {...}{.inline.} -
Iterates over each element of
a.itemsiterates only over the elements that are really in the set (and not over the ones the set is able to hold). Source Edit -
iterator items(a: cstring): char {...}{.inline, raises: [], tags: [].} -
Iterates over each item of
a. Source Edit -
iterator mitems(a: var cstring): var char {...}{.inline, raises: [], tags: [].} -
Iterates over each item of
aso that you can modify the yielded value. Source Edit -
iterator items(E: typedesc[enum]): E:type -
Iterates over the values of the enum
E. Source Edit -
iterator items[T](s: HSlice[T, T]): T -
Iterates over the slice
s, yielding each value betweens.aands.b(inclusively). Source Edit -
iterator pairs[T](a: openArray[T]): tuple[key: int, val: T] {...}{.inline.} -
Iterates over each item of
a. Yields(index, a[index])pairs. Source Edit -
iterator mpairs[T](a: var openArray[T]): tuple[key: int, val: var T] {...}{.inline.} -
Iterates over each item of
a. Yields(index, a[index])pairs.a[index]can be modified. Source Edit -
iterator pairs[IX, T](a: array[IX, T]): tuple[key: IX, val: T] {...}{.inline.} -
Iterates over each item of
a. Yields(index, a[index])pairs. Source Edit -
iterator mpairs[IX, T](a: var array[IX, T]): tuple[key: IX, val: var T] {...}{.inline.} -
Iterates over each item of
a. Yields(index, a[index])pairs.a[index]can be modified. Source Edit -
iterator pairs[T](a: seq[T]): tuple[key: int, val: T] {...}{.inline.} -
Iterates over each item of
a. Yields(index, a[index])pairs. Source Edit -
iterator mpairs[T](a: var seq[T]): tuple[key: int, val: var T] {...}{.inline.} -
Iterates over each item of
a. Yields(index, a[index])pairs.a[index]can be modified. Source Edit -
iterator pairs(a: string): tuple[key: int, val: char] {...}{.inline, raises: [], tags: [].} -
Iterates over each item of
a. Yields(index, a[index])pairs. Source Edit -
iterator mpairs(a: var string): tuple[key: int, val: var char] {...}{.inline, raises: [], tags: [].} -
Iterates over each item of
a. Yields(index, a[index])pairs.a[index]can be modified. Source Edit -
iterator pairs(a: cstring): tuple[key: int, val: char] {...}{.inline, raises: [], tags: [].} -
Iterates over each item of
a. Yields(index, a[index])pairs. Source Edit -
iterator mpairs(a: var cstring): tuple[key: int, val: var char] {...}{.inline, raises: [], tags: [].} -
Iterates over each item of
a. Yields(index, a[index])pairs.a[index]can be modified. Source Edit -
iterator items[T](a: seq[T]): lent2 T {...}{.inline.} -
Iterates over each item of
a. Source Edit -
iterator mitems[T](a: var seq[T]): var T {...}{.inline.} -
Iterates over each item of
aso that you can modify the yielded value. Source Edit -
iterator items(a: string): char {...}{.inline, raises: [], tags: [].} -
Iterates over each item of
a. Source Edit -
iterator mitems(a: var string): var char {...}{.inline, raises: [], tags: [].} -
Iterates over each item of
aso that you can modify the yielded value. Source Edit -
iterator fields[T: tuple | object](x: T): RootObj {...}{.magic: "Fields", noSideEffect.} -
Iterates over every field of
x.Warning: This really transforms the 'for' and unrolls the loop. The current implementation also has a bug that affects symbol binding in the loop body.
Example:
Source Editvar t = (1, "foo") for v in fields(t): v = default(type(v)) doAssert t == (0, "") -
iterator fields[S: tuple | object; T: tuple | object](x: S; y: T): tuple[ key: string, val: RootObj] {...}{.magic: "Fields", noSideEffect.} -
Iterates over every field of
xandy.Warning: This really transforms the 'for' and unrolls the loop. The current implementation also has a bug that affects symbol binding in the loop body.
Example:
Source Editvar t1 = (1, "foo") var t2 = default(type(t1)) for v1, v2 in fields(t1, t2): v2 = v1 doAssert t1 == t2 -
iterator fieldPairs[T: tuple | object](x: T): tuple[key: string, val: RootObj] {...}{. magic: "FieldPairs", noSideEffect.} -
Iterates over every field of
xreturning their name and value.When you iterate over objects with different field types you have to use the compile time
wheninstead of a runtimeifto select the code you want to run for each type. To perform the comparison use the is operator. Another way to do the same withoutwhenis to leave the task of picking the appropriate code to a secondary proc which you overload for each field type and pass thevalueto.Warning: This really transforms the 'for' and unrolls the loop. The current implementation also has a bug that affects symbol binding in the loop body.
Example:
Source Edittype Custom = object foo: string bar: bool proc `$`(x: Custom): string = result = "Custom:" for name, value in x.fieldPairs: when value is bool: result.add("\n\t" & name & " is " & $value) else: result.add("\n\t" & name & " '" & value & "'") -
iterator fieldPairs[S: tuple | object; T: tuple | object](x: S; y: T): tuple[ key: string, a, b: RootObj] {...}{.magic: "FieldPairs", noSideEffect.} -
Iterates over every field of
xandy.Warning: This really transforms the 'for' and unrolls the loop. The current implementation also has a bug that affects symbol binding in the loop body.
Example:
Source Edittype Foo = object x1: int x2: string var a1 = Foo(x1: 12, x2: "abc") var a2: Foo for name, v1, v2 in fieldPairs(a1, a2): when name == "x2": v2 = v1 doAssert a2 == Foo(x1: 0, x2: "abc")
© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/iterators.html