如何从子列表中提取元素?

时间:2019-11-10 07:53:23

标签: scala list

我创建了一个列表来存储一些数据序列,其中每个序列包含三个元素。如何从序列中提取元素之一?

我尝试过像alco(0)(1)和get()这样的括号,但是它们不起作用。

val alco = List(("Light Beer", "4%", "23 OZ"), ("Regular Beer", "6%", "23 OZ"))

val temp = alco(0).get(1)

println(temp)

结果显示:

  

错误:值get不是(String,String,String)的成员         val temp = alco(0).get(1)

2 个答案:

答案 0 :(得分:3)

scala> val alco = List(("Light Beer", "4%", "23 OZ"), ("Regular Beer", "6%", "23 OZ"))
alco: List[(String, String, String)] = List((Light Beer,4%,23 OZ), (Regular Beer,6%,23 OZ))

scala> val (_, temp, _) = alco(0)
temp: String = 4%

scala> val temp = alco(0)._2
temp: String = 4%

请注意,按索引访问Scala列表具有O(n)的复杂性,其中n是列表的大小。因此,如果要遍历它们-最好使用mapcollectfoldLeftforeach调用:

scala> alco.map { case (_, temp, _) => temp }
res0: List[String] = List(4%, 6%)

scala> alco.foreach { x => println(x._2) }
4%
6%

答案 1 :(得分:1)

@Andriy指出:

val alco = List(("Light Beer", "4%", "23 OZ"), ("Regular Beer", "6%", "23 OZ"))

的类型为List[Tuple3[String, String, String]],并且由于Tuple3没有get方法,因此您会收到错误消息。

scala.Tuple3

要解决此问题,只需按如下所示定义列表:

val alco = List(List("Light Beer", "4%", "23 OZ"), List("Regular Beer", "6%", "23 OZ"))

这样,它将是List[List[String]]类型,您的代码应该可以工作。