Scala:如何将数组/列表列表分配给两个变量?

cwl*_*cwl 1 scala

假设我有以下字符串数组:

val lines: List[String] = List("GOOL,1182", "AMZN,1920", "MSFT,124", "APPL,192.2") 
Run Code Online (Sandbox Code Playgroud)

实际上,通常通过读取csv文件来获得这种类型的数组.

从概念上讲,我想

  1. 对于每一行,将其拆分为","
  2. 拆分所有行后,将第一列分配给List,将第二列分配给另一个List.

我想出的方法如下:

var col1List = List[String]()
var col2List = List[String]()
lines.foreach{ x => 
  val cols = x split ","
  col1List = col1List ::: List(cols(0))
  col2List = col2List ::: List(cols(1))
}
Run Code Online (Sandbox Code Playgroud)

之后,我得到以下列表:

List[String] = List(GOOL, AMZN, MSFT, APPL)
List[String] = List(1182, 1920, 124, 192.2)
Run Code Online (Sandbox Code Playgroud)

在Scala中有更好的方法吗?

bot*_*aio 6

你要找的是.unzip方法.

这是一个例子:

val lines: List[String] = List("GOOL,1182", "AMZN,1920", "MSFT,124", "APPL,192.2")
val (l1, l2) = lines.map(_.split(",")).map(arr => (arr.head, arr.last)).unzip
println(l1, l2)
Run Code Online (Sandbox Code Playgroud)

结果:

(List(GOOL, AMZN, MSFT, APPL),List(1182, 1920, 124, 192.2))
Run Code Online (Sandbox Code Playgroud)