Kotlin 数组切片索引

shi*_*nvu 13 kotlin

假设我想迭代 Kotlin 中除第一个元素之外的所有元素IntArray。目前,我正在这样做:

fun minimalExample(nums: IntArray): Unit {
    for(num in nums.sliceArray(IntRange(1,nums.size-1))) println(num)
}
Run Code Online (Sandbox Code Playgroud)

是否有一个简单的语法可以像Python一样执行此操作(我不想指定数组的结束索引nums):

for (num in nums[1:])
Run Code Online (Sandbox Code Playgroud)

dev*_*rob 10

我认为你可以使用 Kotlin 的drop它将删除n数组的第一个元素。

fun minimalExampleWithDrop(nums: IntArray): Unit {
    for(num in nums.drop(1)) println(num)
}

minimalExampleWithDrop(intArrayOf(1,2,3,4,5,6))
// 2
// 3
// 4
// 5
// 6
Run Code Online (Sandbox Code Playgroud)

Repl.it:https://repl.it/repls/SvelteShadyLivecd

  • Drop 会将 `IntArray` 更改为 `List<Int>`,如果您需要 `IntArray`,则必须将其转换回来。 (4认同)
  • 它不会改变原来的样子。它会在新列表中创建数据副本,您可以选择保留对其的引用。 (2认同)

gil*_*des 8

您也可以使用slice列表和数组中存在的方法。以下是两者的示例:

val a = listOf(1, 2, 3, 4)
println(a.slice(1..a.size - 1))

val b = arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
println(b.slice(4..5))
Run Code Online (Sandbox Code Playgroud)

这将打印出:

[2, 3, 4]
[5, 6]
Run Code Online (Sandbox Code Playgroud)