104 lines
2.2 KiB
Markdown
104 lines
2.2 KiB
Markdown
`for` Loop
|
|
==========
|
|
|
|
{{#include ../links.md}}
|
|
|
|
Iterating through a range or an [array], or any type with a registered _type iterator_,
|
|
is provided by the `for` ... `in` loop.
|
|
|
|
Like C, `continue` can be used to skip to the next iteration, by-passing all following statements;
|
|
`break` can be used to break out of the loop unconditionally.
|
|
|
|
To loop through a number sequence (with or without steps), use the `range` function to
|
|
return a numeric iterator.
|
|
|
|
|
|
Iterate Through Strings
|
|
-----------------------
|
|
|
|
Iterating through a [string] yields characters.
|
|
|
|
```rust
|
|
let s = "hello, world!";
|
|
|
|
for ch in s {
|
|
if ch > 'z' { continue; } // skip to the next iteration
|
|
|
|
print(ch);
|
|
|
|
if x == '@' { break; } // break out of for loop
|
|
}
|
|
```
|
|
|
|
|
|
Iterate Through Arrays
|
|
----------------------
|
|
|
|
Iterating through an [array] yields cloned _copies_ of each element.
|
|
|
|
```rust
|
|
let array = [1, 3, 5, 7, 9, 42];
|
|
|
|
for x in array {
|
|
if x > 10 { continue; } // skip to the next iteration
|
|
|
|
print(x);
|
|
|
|
if x == 42 { break; } // break out of for loop
|
|
}
|
|
```
|
|
|
|
|
|
Iterate Through Numeric Ranges
|
|
-----------------------------
|
|
|
|
The `range` function allows iterating through a range of numbers
|
|
(not including the last number).
|
|
|
|
```rust
|
|
// Iterate starting from 0 and stopping at 49.
|
|
for x in range(0, 50) {
|
|
if x > 10 { continue; } // skip to the next iteration
|
|
|
|
print(x);
|
|
|
|
if x == 42 { break; } // break out of for loop
|
|
}
|
|
|
|
// The 'range' function also takes a step.
|
|
for x in range(0, 50, 3) { // step by 3
|
|
if x > 10 { continue; } // skip to the next iteration
|
|
|
|
print(x);
|
|
|
|
if x == 42 { break; } // break out of for loop
|
|
}
|
|
```
|
|
|
|
|
|
Iterate Through Object Maps
|
|
--------------------------
|
|
|
|
Two methods, `keys` and `values`, return [arrays] containing cloned _copies_
|
|
of all property names and values of an [object map], respectively.
|
|
|
|
These [arrays] can be iterated.
|
|
|
|
```rust
|
|
let map = #{a:1, b:3, c:5, d:7, e:9};
|
|
|
|
// Property names are returned in unsorted, random order
|
|
for x in map.keys() {
|
|
if x > 10 { continue; } // skip to the next iteration
|
|
|
|
print(x);
|
|
|
|
if x == 42 { break; } // break out of for loop
|
|
}
|
|
|
|
// Property values are returned in unsorted, random order
|
|
for val in map.values() {
|
|
print(val);
|
|
}
|
|
```
|