各Kotlinの現在のインデックスを取得する方法


回答:


306

@Audiが提供するソリューションに加えて、次のものもありforEachIndexedます。

collection.forEachIndexed { index, element ->
    // ...
}

3
うわー、これはもっと良いと思います...ありがとう
アウディ

1
配列とイテラブルで動作しますが、他に何が必要ですか?
zsmb13 2018

1
プリミティブJava配列と混同して申し訳ありません。
アウディ

break内部で使用する方法は ありますか?
Levon Petrosyan

ループ全体から抜け出すことはできません。実行できる唯一の同様のことreturn@forEachIndexedは、基本的continueに次の要素にスキップするとして機能することです。ブレークする必要がある場合は、それを関数でラップreturnし、ループで使用して、その囲んでいる関数から戻る必要があります。
zsmb13

96

使用する indices

for (i in array.indices) {
    print(array[i])
}

値とインデックスが必要な場合 withIndex()

for ((index, value) in array.withIndex()) {
    println("the element at $index is $value")
}

リファレンス:kotlinの制御フロー


3
他のことを学ぶ必要はないので、この答えの方が良いと思います。単純なforループ+1だけです
underfilho

22

これを試して; forループ

for ((i, item) in arrayList.withIndex()) { }

4
このコードは質問に答えることがありますが、問題を解決する方法や理由に関する追加のコンテキストを提供することで、回答の長期的な価値が向上します。
モニカ

このループに制限をかけるにはどうすればよいですか?それが終了する前に半分またはいくつかの数まで行くように
E.Akio


9

あなたが本当に探しているのは filterIndexed

例えば:

listOf("a", "b", "c", "d")
    .filterIndexed { index, _ ->  index % 2 != 0 }
    .forEach { println(it) }

結果:

b
d

1
関数参照の使用も検討してください.forEach(::println)
Kirill Rakhman '26 / 02/26

@KirillRakhman、そのような状況で関数参照を使用するのが望ましいスタイルですか?私はKotlinを初めて使用するので、まだこのことを理解しています。
Akavall

可能な限り関数参照を使用する傾向があります。複数のパラメーターがある場合、ラムダを使用する場合と比較して、多くの文字を保存します。しかし、それは確かに好みの問題です。
キリルラクマン2018

3

範囲はまた、そのような状況で読み取り可能なコードにつながります。

(0 until collection.size step 2)
    .map(collection::get)
    .forEach(::println)

3
または(0..collection.lastIndex step 2)
Kirill Rakhman
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.