具有数字范围类型的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(...)不起作用的原因是,您已经创建了一个元素,即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,5)