Kotlin:在没有突变的情况下找到循环计数的惯用和声明方式
Kotlin: Idiomatic & Declarative way to find count of a loop without mutation
如何计算 no.of 次循环有 运行 的条件,例如:
var count = 0
while (stk.isNotEmpty()) {
stack.pop()
count++
}
但这涉及临时计数器和突变。在不使用任何临时变量和突变的情况下,是否有更好的惯用和声明方式。我可以想出这样的东西,但它确实感觉很老套:
val count = stk.takeWhile { stk.isNotEmpty() }.also { stk.pop() }.count()
Kotlin 标准库不提供您正在寻找的内容,但您可以创建自己正在搜索的内容:
fun repeatWhile(condition: () -> Boolean, action: () -> Unit): Int {
var count = 0
while (condition()) {
action()
count++
}
return count
}
并像这样使用它:
val stack = Stack<Int>()
stack.push(1)
stack.push(2)
stack.push(3)
val count = repeatWhile({ stack.isNotEmpty() }) {
stack.pop()
}
println(count) // 3
就我个人而言,我认为这并不比将 while 循环和计数器变量暴露给调用站点更好,就像您在问题中所做的那样。
如何计算 no.of 次循环有 运行 的条件,例如:
var count = 0
while (stk.isNotEmpty()) {
stack.pop()
count++
}
但这涉及临时计数器和突变。在不使用任何临时变量和突变的情况下,是否有更好的惯用和声明方式。我可以想出这样的东西,但它确实感觉很老套:
val count = stk.takeWhile { stk.isNotEmpty() }.also { stk.pop() }.count()
Kotlin 标准库不提供您正在寻找的内容,但您可以创建自己正在搜索的内容:
fun repeatWhile(condition: () -> Boolean, action: () -> Unit): Int {
var count = 0
while (condition()) {
action()
count++
}
return count
}
并像这样使用它:
val stack = Stack<Int>()
stack.push(1)
stack.push(2)
stack.push(3)
val count = repeatWhile({ stack.isNotEmpty() }) {
stack.pop()
}
println(count) // 3
就我个人而言,我认为这并不比将 while 循环和计数器变量暴露给调用站点更好,就像您在问题中所做的那样。