在Kotlin中,我想在第2步中迭代项目列表。这样做:
for (i in 0..users.lastIndex step 2) {
val user = users[i]
}
这没关系,但如果有更简单的东西,比如forEach,那就更好了。但是forEach不提供步进。是否有API允许您以forEach的方式提供步进?类似这样的东西:
users.forEach(step = 2) { user ->
}
据我所知,Kotlin标准库中没有这样的函数。然而,创建自己的扩展功能并不太困难:
inline fun <T> List<T>.forEachStep(step: Int = 1, action: (T) -> Unit) {
/*
* May want to have an iterator-based solution as well for lists that
* don't support random access. You could choose which solution to
* use based on 'if (this is RandomAccess)'.
*/
for (i in indices step step) {
action(get(i))
}
}
然后可以在任何List
上使用。
val users: List<User> = ...
users.forEachStep(step = 2) { user ->
// do something...
}
使用forEach
来替换for循环违反了Kotlin编码约定,这也提醒在链接高阶函数时要注意性能。在你开始疯狂使用扩展功能之前,值得记住:-(
比起循环,更喜欢使用高阶函数(
filter
、map
等(。异常:forEach
(更喜欢使用常规for
循环,除非CCD_ 7的接收器是可为空的,或者CCD_更长的呼叫链(。在使用复数的复杂表达式之间进行选择时高阶函数和循环,了解在每种情况下执行的操作并保持性能考虑。