如何遍历数组并分配其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可以工作,但是他们的分配并没有。
我真的很沮丧,因为它看起来很容易,我注意到了。 :(
答案 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
来避免可变性。