如何在scala中向Array中的每个元素追加一个字母

时间:2016-11-03 11:03:32

标签: arrays scala

我有一个字符串数组:

  var z:Array[String] =Array("hand", "ball", "eye")

我想追加一个" s"到z中的每个元素,

我是scala的新手,我可以用附加的'来打印它们。 :

 z.foreach(arg =>println(arg +"s"))

但我正在寻找的是实际上改变z中的所有元素以获得'。

2 个答案:

答案 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)