ここでは、Kotlin でループ(繰り返し)処理をする時のパターンを紹介します。
サンプルコードを利用して解説しますので、そのまま利用できます。
for
まずはループの基本である「for」文を紹介します。
※ Kotlin には Java 文法のような「for (int i = 0; i < n; ++i)」はありません。
配列
配列の値を取得してループする場合
リストの内容を繰り返し処理をしたい場合、上記のように「item in list」にて簡単に処理を繰り返すことができます。
「item in list」にてリスト全ての範囲が繰り返されます。
上記のサンプルでは、「list」を利用していますが、もちろん「array」でも問題ありません。
val list = listOf("one", "two", "three")
for (item in list) {
println(item)
}
// 結果
one
two
three
配列のインデックスを取得して処理をする場合
配列のインデックスを取得して処理をしたい場合、「i in list.indices」のように、リスト変数の後に「.indices」を指定することで、範囲(IntRange)を指定することができます。
val list = listOf("one", "two", "three") for (i in list.indices) { println(list[i]) } // 結果 one two three
配列のインデックスと値の両方を取得したい場合
「withIndex()」を利用することで、インデックスと値の両方を取得して処理をすることができます。
val list = listOf("one", "two", "three") for ((i, value) in list.withIndex()) { println("$i : $value") } // 結果 0 : one 1 : two 2 : three
範囲(Range)を指定してループ
0〜4までの範囲を指定
範囲を指定したい場合は、「x..x」と開始から終了位置までを指定する事ができます。
※「5..10」とした場合、結果は「5、6、7、8、9、10」となります。
for (i in 0..4) { println(i) } // 結果 0 1 2 3 4
他の書き方として、下記のようにも書けます。
0〜3になりますので注意が必要です。
for (i in 0 until 4) { println(i) } // 結果 0 1 2 3
範囲の途中で処理を抜ける場合
繰り返しの途中で処理を抜けたい場合は「break」で抜ける事ができます。
for (i in 0..10) { println(i) if (i == 5) break } // 結果 0 1 2 3 4 5
範囲指定を変数で指定する場合
範囲指定を変数で指定することができます。
val count = 4 for (i in 0..count) { println(i) } // 結果 0 1 2 3 4
指定した範囲を範囲ステップして繰り返す場合
範囲を「0〜4」を指定して、2つおきに処理をしたい場合
for (i in 0..4 step 2) { print(i) } // 結果 0 2 4
4〜0へカウントダウンする範囲を指定する場合
「downTo」を利用することで、4〜0へ逆にカウントダウンしながら処理ができます。
※「4、3、2、1、0」とカウントダウンされます。逆にループします。
for (i in 4 downTo 0) { print(i) } // 結果 4 3 2 1 0
4〜0へカウントダウンする範囲を指定し範囲ステップして繰り返す場合
「step」を利用すると、4から0へ逆にカウントダウンしながら2つおきに処理をすることができます。
もちろん、「step 2」を「step 3」とすることで3つおきに処理ができます。
for (i in 4 downTo 0 step 2) { println(i) } // 結果 4 2 0
Char 型の範囲を指定して繰り返す場合
Char 型の「a〜e」をしていすることで、ASCII の範囲を指定することができます。
for (ch in 'a'..'e') { println(ch) } // 結果 a b c d e
map を繰り返す場合
「in」の後に map 変数を指定することで、map を繰り返すことができます。
val map = mapOf("one" to 1, "two" to 2, "three" to 3) for ((key, value) in map) { println("$key : $value") } // 結果 one : 1 two : 2 three : 3
forEach を利用して配列を繰り返す
for 文ではなく forEach を利用して繰り返す場合
配列の値を単純にループする場合
リスト変数の後に「.forEach」を指定することで繰り返し処理をすることができます。
val list = listOf("one", "two", "three") list.forEach { println(it) } // 結果 one two three
map を繰り返す場合
マップ変数の後に「.forEach」を指定することで繰り返し処理をすることができます。
val map = mapOf("one" to 1, "two" to 2, "three" to 3) map.forEach { (key, value) -> println("$key : $value") } // 結果 one : 1 two : 2 three : 3
while
while に繰り返す条件を指定することで処理を繰り返すことができます。
条件が 「false」になるまで繰り返されます。
var i = 0 while (i < 5) { println(i) i++ } // 結果 0 1 2 3 4
do while
while に繰り返す条件を指定することで処理を繰り返すことができます。
条件の判定は各処理終了後に判定されます。
つまり、1回は必ず処理されます。
条件が 「false」になるまで繰り返されます。
var i = 0 do { println(i) i++ } while (i < 5) // 結果 0 1 2 3 4
repeat
「repeat」を利用すると指定した回数単純に繰り返し処理をすることができます。
repeat(5) { println(it) } // 結果 0 1 2 3 4