我尝试将一个数组拆分成彼此距离较小的元素块,即与相邻元素的差异低于阈值的地方。
即。使用约束作为约束,两个后续数字之间的差异不得超过2,如下所示:
val data = Array(1.0,2.0,3.0,10.0,11.0,12.0,20.0,21.0,22.0,23.0,24.0)
会变成
Array(
Array(1.0,2.0,3.0),
Array(10.0,11.0,12.0),
Array(20.0,21.0,22.0,23.0,24.0)
)
我设法使用span
得到一个丑陋的解决方案,这只适用于两个"组"数字:
val data = Array(1.0,2.0,3.0,10.0,11.0,12.0)
// duplicate firs element
val modData = data.head +: data
val chunks = modData.tail.zip(modData)
.map{case (next,prev) => (next,next-prev)}
.span{case (_,gap) => gap<2.0}
val partA = chunks._1.map(_._1) // Array(1.0,2.0,3.0)
val partB = chunks._2.map(_._1) // Array(10.0,11.0,12.0)
不幸的是,我不知道如何以功能的方式解决这个问题。