To iterate through a collection of items from start to finish, we can simply use the for loop instead:
var array = arrayOf(1, 2, 3)
for (item in array) {
print(item)
}
It can also be defined without a block body:
for (item in array)
print(item)
If a collection is a generic collection, then item will be smart cast to a type corresponding to a generic collection type. In other words, if a collection contains elements of type Int, the item will be smart cast to Int:
var array = arrayOf(1, 2, 3)
for (item in array)
print(item) // item is Int
We can also iterate through the collection using its index:
for (i in array.indices)
print(array[i])
The array.indices param returns IntRange with all indexes. It is the equivalent of (1.. array.length - 1). There is also an alternative withIndex library method that returns a list of the IndexedValue property, which contains an index and a value. This can be deconstructed into these elements this way:
for ((index, value) in array.withIndex()) {
println("Element at $index is $value")
}
The construct (index, value) is known as a destructive declaration, and we will discuss it in Chapter 4, Classes and Objects.