kotlin - Kotlin:查找没有突变的循环计数的惯用和声明式方法
问题描述
如何计算循环在条件下运行的次数,例如:
var count = 0
while (stk.isNotEmpty()) {
stack.pop()
count++
}
但这涉及到一个临时的反击和突变。在不使用任何临时变量和突变的情况下,是否有更好的惯用和声明方式。我可以想出这样的东西,但它确实感觉很hacky:
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 循环和计数器变量暴露给调用站点更好,就像您在问题中所做的那样。
推荐阅读
- iframe - 服务器端检测 iframe
- excel - VBA 列出 SQL Server 分析服务器中的所有多维数据集
- svg - 使用时如何更改 SVG 中克隆元素的 ID
- reactjs - 带有 Fetch 的 React-Router 导致 404(未找到)
- powershell - youtube-dl 的 Powershell 脚本
- ios - 实例化并呈现视图控制器
- amazon-s3 - 在不定义表架构的情况下复制到雪花表中
- chocolatey - 推送一个包的多个版本(chocolatey)
- python - 保持非连续重复值熊猫的数据透视表
- python - TypeError:打印具有不正确索引的 Pandas 数据帧时不支持格式字符串