Kotlin 平面图解压缩数据类列表



给定一个数据类的2D 坐标列表

data class Point(val x: Int, val y:Int)
val points: List<Point>

以及一个TornadoFX(Kotlin中的JavaFX(方法,该方法采用[x,y,x2,y2...]的扁平数组:

polyline(vararg points: kotlin.Number)

我刚刚写了以下内容,然后离开时感觉这不可能是全部

fun List<Point>.asPolyline() = this.flatMap { p -> listOf(p.component1(), p.component2()) }
polyline(*points.asPolyline().toTypedArray())

有没有办法扩展数据类(类似于Array与该*的传播方式(,或者只是进行此转换的更好方法?

这是一种用最少的分配来实现的方法:

fun List<Point>.toFlatArray() = 
Array(size * 2) { with (this[it / 2]) { if (it % 2 == 0) x else y } }

我找不到一种实质性不同的方法来做到这一点,但我认为如果我们使用foldMutableList,它可以在没有为每个Point分配List的情况下完成:

fun List<Point>.asPolyline(): List<Number> = this.fold(mutableListOf()) { next, carry -> 
next.apply {
this.add(carry.x)
this.add(carry.y)
}
}

最新更新