2013-08-19 15 views
1

我想要做的基本上都是在Java代码如下:有没有办法从数组或列表中初始化多个变量在斯卡拉?

String[] tempStrs = generateStrings(); 
final int hour = Integer.parseInt(tempStrs[0]); 
final int minute = Integer.parseInt(tempStrs[1]); 
final int second = Integer.parseInt(tempStrs[2]); 

然而,tempStrs只是一个临时变量,它已不再使用。然后,这可以用F#中的以下代码表示:

let [| hour; minute; second |] = Array.map (fun x -> Int32.Parse(x)) (generateStrings()) 

在Scala中有类似的方法吗? 我知道这可以通过斯卡拉

val tempInts = generateStrings().map(_.toInt) 
val hour = tempInts(0) 
val minute = tempInts(1) 
val second = tempInts(2) 

做,但有像F#(没有临时变量)较短的方法吗?


编辑:

我用

var Array(hour, minute, second) = generateStrings().map(_.toInt) 

当然,使用val代替var还曾。

回答

13

如何:

scala> val numbers = List(1, 2, 3) 
numbers: List[Int] = List(1, 2, 3) 

scala> val List(hours, minutes, seconds) = numbers 
hours: Int = 1 
minutes: Int = 2 
seconds: Int = 3 
+0

它的工作。谢谢。 – Naetmul

+0

@Naetmul:没问题,很乐意帮忙。 – sberry

+0

不错,但它似乎产生matcherror,如果列表没有大小3. –

3

要处理三个或多个值,你可以使用:

scala> val numbers = List(1, 2, 3, 4) 
numbers: List[Int] = List(1, 2, 3, 4) 

scala> val num1 :: num2 :: num3 :: theRest = numbers 
num1: Int = 1 
num2: Int = 2 
num3: Int = 3 
theRest: List[Int] = List(4) 

对于大小-3名单theRest只会是空列表。当然,它不处理两个或更少元素的列表。

相关问题