使用条件迭代数组以创建新数组

时间:2017-03-16 08:04:49

标签: arrays scala for-loop

如何遍历数组并分配其val? 我尝试了以下两种方法但它们不起作用:

var a : Array[String] = Array("foo","bar")
var b : Array[String] = Array()
for (i <- 0 to (a.length-1)) {
    println(a(i))
    b :+ a(i)
}

var a : Array[String] = Array("foo","bar")
var b : Array[String] = Array()
for (element <- a){
    println(element)
    b :+ element
}

所以println可以工作,但是他们的分配并没有。

我真的很沮丧,因为它看起来很容易,我注意到了。 :(

2 个答案:

答案 0 :(得分:3)

让标准库为您进行复制。

val a : Array[String] = Array("foo","bar")
val b : Array[String] = a.clone()

您的代码无法正常工作的原因是因为:+不是赋值运算符。例如,Array() :+ "str"此语句不会修改Array,它会使用修改后的值创建新的Array。遗憾的是,您的代码并未将新Array分配给新变量或现有变量,因此修改将丢失。

你可以这样做......

for (element <- a){
  b = b :+ element
}

...但是有更好的方法来完成这项工作。

<强>更新

要过滤多个不相关品质的字符串元素,您可以尝试这样做。

val acceptableRE = "(f.*|ba.*)".r
val a: Array[String] = Array("foo", "bar", "buf", "bba")
val b: Array[String] = a.collect{case acceptableRE(s) => s}   // Array(foo, bar)

答案 1 :(得分:2)

您可以使用Array val a : Array[String] = Array("foo","bars") val b = a.filter(el => el.length > 3) 来过滤条件。

尝试使用元素长度为条件

的此示例
val

注意:更好地使用#!/bin/bash function hex2string () { I=0 while [ $I -lt ${#1} ]; do echo -en "\x"${1:$I:2} let "I += 2" done } hex2string "31323334353637383930313233" echo 来避免可变性。