使用迭代索引的Kotlin过滤器lambda数组

时间:2017-10-21 19:49:16

标签: arrays lambda kotlin

我想将数组过滤成每个第n项的数组。例如:

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()
}

使用例如Kotlin的.filter()并且没有A)配置新的ArrayList和B)手动迭代for / in循环是否有惯用的方法?

2 个答案:

答案 0 :(得分:12)

filterIndexed函数完全适合这种情况:

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

答案 1 :(得分:5)

使用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 }