根据元素

时间:2017-02-17 13:28:39

标签: scala

我尝试将一个数组拆分成彼此距离较小的元素块,即与相邻元素的差异低于阈值的地方。

即。使用约束作为约束,两个后续数字之间的差异不得超过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)

不幸的是,我不知道如何以功能的方式解决这个问题。

0 个答案:

没有答案