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