Android Kotlin中如何在for循环内获取列表项的索引?
嘿,我来帮你搞清楚为啥会出现这个结果~
问题根源分析
你代码里的核心问题是混淆了列表元素和列表索引的概念:
- 循环里的
i是列表中的字符串元素(当匹配到"banana"时,i就是这个字符串本身) - 调用
i.indices实际上是在调用字符串的indices属性,它返回的是这个字符串自身的字符索引范围。"banana"一共有6个字符,索引从0到5,所以输出就是0..5。
正确获取列表元素索引的几种方法
下面给你几种实用的写法,都能拿到"banana"在列表里的正确索引:
方式1:用withIndex()遍历(最推荐)
这个方法能同时拿到索引和对应元素,代码逻辑更清晰直观:
fun forLoopListItems() { val items = listOf("apple", "banana", "kiwifruit") for ((index, item) in items.withIndex()) { if (item == "banana") { println("position is $index") } } }
方式2:调用列表的indexOf()方法
如果能确定列表里没有重复的"banana",可以直接用列表的indexOf()方法获取元素对应的索引:
fun forLoopListItems() { val items = listOf("apple", "banana", "kiwifruit") for (item in items) { if (item == "banana") { val position = items.indexOf(item) println("position is $position") } } }
小提醒:如果列表里有多个"banana",
indexOf()只会返回第一个匹配元素的索引哦。
方式3:直接遍历列表的索引范围
也可以先遍历列表的索引,再通过索引拿到对应的元素:
fun forLoopListItems() { val items = listOf("apple", "banana", "kiwifruit") for (index in items.indices) { val item = items[index] if (item == "banana") { println("position is $index") } } }
内容的提问来源于stack exchange,提问作者Muhammed Haris
相关产品推荐
相关产品推荐

