Tag: 迭代器

在Kotlin中编号为MutableList <Int>的奇数大小返回带有迭代器的IndexOutOfBoundsException

使用下面的代码运行测试会返回一个java.lang.IndexOutOfBoundsException:索引75,大小:75。 这在偶数编号的列表上不会发生,只有奇数编号的列表。 我做错了吗? Java中的迭代似乎没有这样做。 var mList: MutableList<Int> = mutableListOf() for(n in 1..75) { mList.add(n) } for(n in mList.iterator()) { println(mList[n]) }

迭代时返回collection元素的双重索引

在Kotlin文档中,我找到了以下示例: for ((index, value) in array.withIndex()) { println("the element at $index is $value") } 是否有可能(以及如何)做类似于二维矩阵: for ((i, j, value) in matrix2D.withIndex()) { // but iterate iver double index: i – row, j – column if (otherMatrix2D[i, j] > value) doSomething() } 如何在Kotlin类中支持这个功能?

如何修改Kotlin序列的前缀,但保留尾巴?

Kotlin提供了takeWhile方法,让一个Sequence<T>前n项目分别作为另一个序列来处理,例如drop其中的一些, map到其他值等。 但是当我使用take和takeWhile ,序列的尾部被丢弃。 现在,给定一个一次受约束的序列,如何保留尾部,如何保留它的任意前缀到另一个序列? 例: val seq = (1..10).asSequence().constrainOnce() // emits 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 val modified = seq.changePrefix { take(5).map { -1 * it } } // emits -1, -2, -3, -4, -5, 6, 7, 8, 9, 10 我如何做同样的多个前缀? 例: val seq = (1..10).asSequence().constrainOnce() val modified = […]

什么是这个python迭代器的等价物的kotlin成语

问题是,如何在Kotlin中创建一个像Python一样的迭代器。 考虑这个将字符串解析为子字符串的Python代码: def parse(strng, idx=1): lst = [] for i, c in itermarks(strng, idx): if c == '}': lst.append(strng[idx:i-1]) break elif c == '{': sublst, idx = parse(strng, i+1) lst.append(sublst) else: lst.append(strng[idx:i-1]) idx = i+1 return lst, i >>>res,resl = parse('{ a=50 , b=75 , { e=70, f=80 } }') >>>print(resl) >>>[' a=50', ' b=75', […]

在Kotlin中,如何在迭代时修改列表的内容

我有一个列表: val someList = listOf(1, 20, 10, 55, 30, 22, 11, 0, 99) 我想在修改一些值的时候迭代它。 我知道我可以用map做,但是做了一个副本。 val copyOfList = someList.map { if (it <= 20) it + 20 else it } 我如何在没有副本的情况下做到这一点? 注意: 这个问题是由作者故意写的和回答的( 自我回答的问题 ),所以对于常见的Kotlin话题的习惯性的回答是在SO中。 此外,为了澄清一些真正的古老的答案写为科特林的阿尔法,是不是今天的Kotlin准确。