使用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以允许此操作

特别是我们需要:

  1. rangeTo函数引入BigInteger(允许使用.. operator
  2. 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 通过解构一次性给多个元素赋值 )

如何使用foreach循环进入另一个foreach循环来遍历c​​odeigniter中的两个不同的数据表?

可以使用foreach遍历循环的条件