如何在Kotlin中编写含双索引的for循环?
在Kotlin中实现Java风格的多变量控制循环
问题背景
给定Java中如下形式的多变量控制for循环:
for (int i = 0, j = 0; i < first.length && j < last.length; i++, j++) { if (first[i] != last[j]) break; sb.append(first[i]); }
需要在Kotlin中编写逻辑等价的循环。
方式一:while循环(最贴合原逻辑)
Kotlin没有Java风格的多初始化条件for循环,最直接的等价实现是使用while循环手动维护变量:
var i = 0 var j = 0 val first = strs[0].toCharArray() val last = strs[strs.lastIndex].toCharArray() val sb = StringBuilder() while (i < first.size && j < last.size) { if (first[i] != last[j]) break sb.append(first[i]) i++ j++ }
方式二:for循环配合范围,同步维护第二个变量
如果更习惯for循环的写法,可以遍历第一个变量的索引范围,同时同步更新第二个变量:
val first = strs[0].toCharArray() val last = strs[strs.lastIndex].toCharArray() val sb = StringBuilder() var j = 0 for (i in first.indices) { if (j >= last.size || first[i] != last[j]) break sb.append(first[i]) j++ }
这里需要额外判断j是否超出数组长度,确保和原循环的终止条件完全一致。
方式三:利用zip函数(简化元素遍历场景)
如果你的核心需求是遍历两个数组的对应元素,Kotlin的zip函数可以大幅简化代码。zip会自动遍历到两个数组中较短的那个的末尾,和原循环的终止条件匹配:
val first = strs[0].toCharArray() val last = strs[strs.lastIndex].toCharArray() val sb = StringBuilder() for ((charFromFirst, charFromLast) in first.zip(last)) { if (charFromFirst != charFromLast) break sb.append(charFromFirst) }
注意这种写法适用于只需要元素而非索引的场景,若需要使用索引,建议选择前两种方式。
内容的提问来源于stack exchange,提问作者shanwu
相关产品推荐
相关产品推荐

