Mat*_*iss 7 arrays flatten multidimensional-array kotlin
我有一个二维节点数组,我希望使用Kotlin数组的flatten函数将其展平为所有节点的单个数组.
val nodes = kotlin.Array(width, { width ->
kotlin.Array(height, { height -> Node(width, height) })
})
Run Code Online (Sandbox Code Playgroud)
然后我尝试在2D数组上调用flatten函数
nodes.flatten()
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:Type mismatch: inferred type is Array<Array<Node>> but Array<Array<out ???>> was expected.还有另一种方法我应该这样做吗?
Kotlin中的数组是不变的,所以Array<Array<Node>>不是Array<Array<out T>>(它是接收器类型flatten).
看起来这将在Kotlin 1.1中修复:放松Array.flatten中的泛型差异·JetBrains/kotlin @ 49ea0f5.
在Kotlin 1.1发布之前,您可以维护自己的版本flatten:
Run Code Online (Sandbox Code Playgroud)/** * Returns a single list of all elements from all arrays in the given array. */ fun <T> Array<out Array<out T>>.flatten(): List<T> { val result = ArrayList<T>(sumBy { it.size }) for (element in this) { result.addAll(element) } return result }
| 归档时间: |
|
| 查看次数: |
2974 次 |
| 最近记录: |