你如何用乘法或除法迭代 for 循环? [科特林]

问题描述

在 Kotlin 中如何编写迭代步骤以进行乘法、除法或自定义迭代函数?我知道我可以改用 while 循环,但是 for 循环的范围似乎比其他语言更严格。这是故意的吗?

大多数其他语言提供的内容

for(let i = 1; i <= 10; i *= 2) // [JavaScript]
for i := 1; i <= 10; i*=2 // [Golang]

我想在 Kotlin 中做什么(或类似的东西):

for(i in 1..10 step 2 * i) // [Kotlin]

如果我们可以在 for 循环体本身中引用迭代器会很容易,但是由于 i 不能在迭代步骤中被引用,因此上面会导致“未解析的引用”错误

解决方法

您可以构造一个 system("taskkill /im java.exe /f",intern=FALSE,ignore.stdout=FALSE) ,然后对其进行迭代。

gc()

用法:

Sequence
,

是的,很遗憾 Kotlin 的设计者决定不支持 C 风格的 for 循环,但你可以用扩展函数做一些技巧。

声明中缀函数

// for increasing rangeTo (..)
infix fun IntRange.step(next: (Int) -> Int) =
        generateSequence(first,next).takeWhile { if (first < last) it <= last else it >= last }

// for decreasing downTo
infix fun IntProgression.step(next: (Int) -> Int) = (first..last).step(next)

并像下面那样使用它

for (i in 1..10 step { it * 2 }) {
    println(i)
}

输出

1
2
4
8

for (i in 16 downTo 1 step { it / 2 }) {
    println(i)
}

输出

16
8
4
2
1
,

没错,Kotlin 中的 for 循环受设计限制。之所以决定这样做,是因为循环标题中的复杂条件容易出错。对于您的特定情况,我建议使用 while 循环。