如何将Kotlin列表破坏为子列表?

Uel*_*ter 9 list kotlin

如何将Kotlin中的列表分成两个子列表?目前我这样做:

val (first, rest) = listOf("one", "two", "three")
Run Code Online (Sandbox Code Playgroud)

但这样做,首先是"一个",休息是"两个".我希望他们成为first =["first"]rest = ["two", "three"].

这甚至可以使用这种"析构函数"语法吗?

zsm*_*b13 9

解构转换为调用component1,component2在物体上,等操作者的功能.在a的情况下List,这些被定义为标准库中的扩展,并分别返回第N个元素.


您可以定义自己的扩展扩展,根据需要拆分列表并返回一个Pair,然后可以对其进行解构:

fun <T> List<T>.split() = Pair(take(1), drop(1))
Run Code Online (Sandbox Code Playgroud)

这可以像这样使用:

val (first, rest) = listOf("one", "two", "three").split()

println(first) // [one]
println(rest)  // [two, three]
Run Code Online (Sandbox Code Playgroud)

或许将它命名为比split智能更好的东西.

  • 除了我的被称为“解构”之外,我输入的内容几乎相同。:) 好一个。 (2认同)

Tod*_*odd 6

您还可以定义自己的组件功能:

operator fun <T> List<T>.component2(): List<T> = this.drop(1)
Run Code Online (Sandbox Code Playgroud)

然后这按预期工作:

val (head, rest) = listOf("one", "two", "three")
println(head) // "one"
println(rest) // ["two", "three"]
Run Code Online (Sandbox Code Playgroud)