Title here
Summary here
### Range over Built-in Types
*range* iterates over elements in a variety of built-in data structures. Let's see how to use `range` with some of the data structures we've already learned.
```chapel
// Chapel program that demonstrates range over built-in types
// Sum the numbers in a list.
var nums = [2, 3, 4];
var sum = 0;
for num in nums {
sum += num;
}
writeln("sum: ", sum);
// Using range with indices
for (i, num) in zip(nums.domain, nums) {
if num == 3 {
writeln("index: ", i);
}
}
// Iterating over key/value pairs in a map.
var kvs = ["a" => "apple", "b" => "banana"];
for (k, v) in kvs {
writeln(k, " -> ", v);
}
// Iterating over just the keys of a map.
for k in kvs.keys() {
writeln("key: ", k);
}
// Iterating over characters in a string
for (i, c) in zip(0..#'go'.localeToIndex('go'), 'go'.codepoints()) {
writeln(i, " ", c);
}
To run the program, save the code in a file with a .chpl
extension and use the chpl
compiler to compile and run it.
$ chpl example.chpl -o example
$ ./example
sum: 9
index: 1
a -> apple
b -> banana
key: a
key: b
0 103
1 111
Chapel’s for
loops and iterations provide powerful and flexible ways to work with various data structures. Let’s dive into more advanced features of the language in the next examples.