有没有一种方法可以让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(...)
不起作用的原因是您创建了一个单一元素的Array
:Range
本身。您已经创建了一个范围数组。难怪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)