Kotlin filter lambda array using iteration index

问题描述:

我想过滤一个数组到每个第n个项目的数组中。对于例子:Kotlin filter lambda array using iteration index

fun getNth(array: Array<Any>, n: Int): Array<Any> { 
    val newList = ArrayList<Any>() 
    for (i in 0..array.size) { 
     if (i % n == 0) { 
      newList.add(array[i]) 
     } 
    } 
    return newList.toArray() 
} 

是否有一个惯用的方式来做到这一点使用例如科特林的.filter()和无A)设置新ArrayList和B)手动迭代与for/in循环?

+0

只是一个评论,上面的代码只是Java的屏蔽在Kotlin文件中,我建议您尝试以不同的方式查看Kotlin代码,这将帮助您使用我们可用的所有内容。 –

+0

绝对如此。这就是我问这个问题的原因。 –

filterIndexed功能正好适合这种情况:

array.filterIndexed { index, value -> index % n == 0 } 

使用Array.withIndex():

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/with-index.html

array.withIndex().filter { (i, value) -> i % n == 0 }.map { (i, value) -> value }