mkString具有数值范围类型的行为



有没有一种方法可以让mkString与数字范围类型一起工作?

我想制作一个像{1-2-3-4-5}这样的字符串,但范围要大得多。当我在参数中使用范围定义时,mkString似乎不会产生这种输出。想知道为什么会这样吗?

//Desired output
@ Array(1,2,3,4,5).mkString("{","-","}") 
res860: String = "{1-2-3-4-5}"
@ Array(1 to 5).mkString("{","-","}") 
res861: String = "{Range 1 to 5}"
@ Vector('a' to 'z').mkString("{","---","}") 
res856: String = "{NumericRange a to z}"

mkString()Range上正常工作。不需要中间体Array

Range(3, 23, 4).mkString("{","-","}") //res0: String = {3-7-11-15-19}
('b' to 'w' by 3).mkString(":")      //res1: String = b:e:h:k:n:q:t:w

Array(1 to 5).mkString(...)不起作用的原因是您创建了一个单一元素的ArrayRange本身。您已经创建了一个范围数组。难怪mkString()输出不是您想要的。

您需要Array(1 to 5: _*)Array.range(1, 6),请小心类型:

scala> Array(1 to 5)
res2: Array[scala.collection.immutable.Range.Inclusive] = Array(Range 1 to 5)
scala> Array(1 to 5: _*)
res3: Array[Int] = Array(1, 2, 3, 4, 5)
scala> Array.range(1, 6)
res4: Array[Int] = Array(1, 2, 3, 4, 5)

最新更新