我想把一个数组过滤成一个每第n个项目的array.例如:

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

Is there an idiomatic way to do this using for example Kotlin's .filter() and without A) provisioning a new ArrayList and B) manually iterating with a for/in loop?

推荐答案

filterIndexed function is suited exactly for this case:

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

Kotlin相关问答推荐

Compose:LaunchedEffect在密钥更改后不会重新启动

我可以检测一个函数是否在Kotlin中被递归调用(即,重入)吗?

使用数据存储首选项Kotlin Jetpack Compose

Kotlin:类型不匹配:推断的类型已运行,但应等待

为什么可组合对象看似无状态(唯一传递的参数是函数,而不是状态),但会进行重组

Mockk:对同一函数进行两次存根会忽略第一个行为

Kotlin中是否可以混合使用推断和显式的通用类型参数?

使用 StateFlow 时如何移除监听器?

奇怪的 cotlin check Not Null 参数错误

从代码块执行和返回(在 Elvis 运算符之后)

runInTransaction 块内的挂起方法

将 Android Studio 升级到 3.1.0 后的 Android Support 插件错误

requireNotNull vs sure !! 操作符

Kotlin JVM 和 Kotlin Native 有什么区别?

如何将map函数应用于Kotlin中的数组并更改其值?

在 Kotlin 中返回函数有不那么丑陋的方法吗?

Kotlin,什么时候按map授权?

Recyclerview: listen to padding click events

你如何在 Kotlin 中注释 Pair 参数?

Android studio,构建kotlin时出现奇怪错误:生成错误代码