什么是.indices在kotlin中的含义?

时间:2017-06-01 09:37:57

标签: kotlin

我想知道.indices究竟是如何工作的,这两个for循环之间的主要区别是什么。

for (arg in args)
    println(arg)

for (i in args.indices)
    println(args[i])

withIndex()函数

的用途是什么
for ((index, value) in array.withIndex()) {
    println("the element at $index is $value")
}

4 个答案:

答案 0 :(得分:5)

这些只是迭代数组的不同方法,具体取决于您在for循环体内需要访问的内容:当前元素(第一种情况),当前索引(第二种情况)或两者(第三种情况)。

如果你想知道它们是如何工作的,你可以跳转到Kotlin运行时的代码(IntelliJ中的 Ctrl + B ) ,并找出答案。

对于indices具体而言,这很简单,它实现为extension property,返回IntRange for循环可以迭代:

/**
 * Returns the range of valid indices for the array.
 */
public val <T> Array<out T>.indices: IntRange
    get() = IntRange(0, lastIndex)

答案 1 :(得分:2)

如文档中所述 indices 是列表中的索引值。

  

返回此集合的有效索引的IntRange。

有关详细信息,请参阅documentation

答案 2 :(得分:0)

indices返回集合的IntRange(从第一个位置到最后一个位置的索引范围),例如:

val array= arrayOf(10,20,30,40,50,60,70)

println("Indices: "+array.indices) // output: Indices: 0..6  

在问题中,两个循环都在做相同的事情,并且以不同的方式迭代任何集合(如@ zsmb13所述),但是,第二个for循环不会像第一个那样创建迭代器对象。

indices返回IntRange,因此您必须检查IntRange的{​​{3}}有用方法

答案 3 :(得分:0)

我写的时候

for (i in 0..searchResultsTemp.items.size-1 )
        { " la-la-la "}, 

我想处理集合的每个项目,但我不会使用 forEach 运算符,我可以访问集合项目的索引。 然后内置的Android Studio helper 建议我自动将这个表达式替换为

 for (i in searchResultsTemp.items.indices)
        { " la-la-la "}

是一样的。