如何将Kotlin中的列表分成两个子列表?目前我这样做:
val (first, rest) = listOf("one", "two", "three")
Run Code Online (Sandbox Code Playgroud)
但这样做,首先是"一个",休息是"两个".我希望他们成为first =["first"]和rest = ["two", "three"].
这甚至可以使用这种"析构函数"语法吗?
解构转换为调用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智能更好的东西.
您还可以定义自己的组件功能:
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)