如何将数值Scala数组转换为数组中值的间隔数组?
总体目标是获取一个数值数组并将其转换为该数组中的区间数组。间隔可以表示为元组或数组。最终这些无论如何都会被转换成字符串。例如我希望 Array(0,1,2,3) 变成 Array("0 to 1", "1 to 2", "2 to 3")
这里有些例子:
示例 1
输入: Array(0,1,2,3)
输出: Array((0,1), (1,2), (2,3))
示例 2
输入: Array(Double.NegativeInfinity,0,1,2,3,Double.PositiveInfinity)
输出: Array((Double.NegativeInfinity,0), (0,1), (1,2), (2,3), (3,Double.PositiveInfinity))
回答
这就是sliding(2)Scala 集合的作用
scala> Array(0,1,2,3).sliding(2).toList
val res1: List[Array[Int]] = List(Array(0, 1), Array(1, 2), Array(2, 3))
scala> Array(Double.NegativeInfinity,0,1,2,3,Double.PositiveInfinity).sliding(2).toList
val res7: List[Array[Double]] = List(Array(-Infinity, 0.0), Array(0.0, 1.0), Array(1.0, 2.0), Array(2.0, 3.0), Array(3.0, Infinity))
要从滑动中获取输出并使字符串“0 到 1”、“1 到 2”等,如您所见,您可以使用map字符串插值。的{}括号内是必要的内插的值(arr(i)在阵列中)。
Array(0,1,2,3).sliding(2).map(arr => s"${arr(0)} to ${arr(1)}").toList
val res19: List[String] = List(0 to 1, 1 to 2, 2 to 3)