我有一个字符串数组:
var z:Array[String] =Array("hand", "ball", "eye")
我想追加一个" s"到z中的每个元素,
我是scala的新手,我可以用附加的'来打印它们。 :
z.foreach(arg =>println(arg +"s"))
但我正在寻找的是实际上改变z中的所有元素以获得'。
答案 0 :(得分:6)
取决于您的意思"更改z"中的所有元素。 数组是可变容器,所以你可以在理论上改变数据,即使它不是真的" scala方式",通常不是一个好主意:
z.indices.foreach(z(_)+="s")
更好的方式,更惯用和安全,方法是使用地图,如其他答案所述:
val newZ = z.map(_ + "s")
这将创建包含已修改元素的数组副本,而原始文件保持不变。如果您的阵列非常大,这可能会变得过高,因为它需要将所有数据复制到新容器中。对于这样的情况,最好使用迭代器,并将操作链接到一个序列中,以便只实现最终结果。例如:
val processedData = z.iterator
.map(_ + "s")
.filter(_.startsWith("foo"))
.map(_.substring(3))
.toArray
这对数组的内容进行了三次操作,但避免在每次操作后创建中间副本。
答案 1 :(得分:2)
使用map
var z:Array[String] =Array("hand", "ball", "eye")
val result = z.map {_ + "s"}
z.map {_ + "s"}
与z.map {str => str + "s"}
Scala REPL
scala> var z:Array[String] =Array("hand", "ball", "eye")
z: Array[String] = Array(hand, ball, eye)
scala> z.map {_ + "s"}
res0: Array[String] = Array(hands, balls, eyes)