【问题标题】:How to pull an element from a sublist?如何从子列表中提取元素?
【发布时间】:2020-03-06 06:38:20
【问题描述】:

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

我尝试过括号,例如 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)

结果显示:

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

【问题讨论】:

    标签: scala list


    【解决方案1】:
    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%
    

    【讨论】:

    • 可能值得解释为什么...我猜这是一个元组列表而不是一个列表列表
    【解决方案2】:

    正如@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]] 类型,您的代码应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-18
      • 2021-05-16
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      相关资源
      最近更新 更多