使用Kotlin中的foreach循环遍历BigInteger值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Kotlin中的foreach循环遍历BigInteger值相关的知识,希望对你有一定的参考价值。
我试图使用以下代码片段在BigInteger
上循环Kotlin
值。但它告诉For-loop range must have an 'iterator()' method
。如何在BigInteger
中循环Kotlin
值?
private fun pow(base: BigInteger, power: BigInteger): String {
for(i in BigInteger.ZERO..power){ //Giving error
}
}
答案
您可以扩展BigInteger
以允许此操作
特别是我们需要:
- 将
rangeTo
函数引入BigInteger
(允许使用..
operator
) - 将
iterator
函数添加到rangeTo
operator
返回的范围内
rangeTo
功能
在这里,我为extension function定义了一个BigInteger
operator fun BigInteger.rangeTo(other: BigInteger) =
BigIntegerRange(this, other)
BigIntegerRange
:
class BigIntegerRange(
override val start: BigInteger,
override val endInclusive: BigInteger
) : ClosedRange<BigInteger>, Iterable<BigInteger> {
override operator fun iterator(): Iterator<BigInteger> =
BigIntegerRangeIterator(this)
}
BigIntegerRangeIterator
:
class BigIntegerRangeIterator(
private val range: ClosedRange<BigInteger>
) : Iterator<BigInteger> {
private var current = range.start
override fun hasNext(): Boolean =
current <= range.endInclusive
override fun next(): BigInteger {
if (!hasNext()) {
throw NoSuchElementException()
}
return current++
}
}
现在这段代码:
fun main() {
for (i in BigInteger.ZERO..BigInteger.TEN) {
println(i)
}
}
编译和打印:
0
1
2
3
4
5
6
7
8
9
10
不要忘记import
rangeTo
功能
也可以看看:
以上是关于使用Kotlin中的foreach循环遍历BigInteger值的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 学习之被我一直用错的“return@forEachIndexed/return@forEach”
Kotlin 学习之被我一直用错的“return@forEachIndexed/return@forEach”
Kotlin集合操作 ③ ( List 集合遍历 | for in | forEach | forEachIndexed | List 通过解构一次性给多个元素赋值 )
Kotlin集合操作 ③ ( List 集合遍历 | for in | forEach | forEachIndexed | List 通过解构一次性给多个元素赋值 )