给定一个数据类的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 } }
我找不到一种实质性不同的方法来做到这一点,但我认为如果我们使用fold
和MutableList
,它可以在没有为每个Point
分配List
的情况下完成:
fun List<Point>.asPolyline(): List<Number> = this.fold(mutableListOf()) { next, carry ->
next.apply {
this.add(carry.x)
this.add(carry.y)
}
}