在Scala中,如何引用可序列化列表中的索引?

2ic8powd  于 2022-11-23  发布在  Scala
关注(0)|答案(1)|浏览(134)

我是Scala的新手,正在学习Scala。我尝试通过将列表传递给函数来组合多个List并打印一个表。但是当我尝试通过索引引用值时,我得到了错误
可序列化不接受参数
打印输入(“%3s%3s%3s\n”).格式化(元素(0),元素(1),元素(2))瓦尔列表1 =列表(“1”,“2”,“3”)值列表2 =列表(“1”,“1”,“5”)

var newLst = List[Serializable]()

newLst :+= list1
newLst :+= list2

def display_table(a:List[Serializable]){

  println("%3s%3s%3s\n".formatted("A","B","C"))
  for (elm <- a){
      println("%3s%3s%3s\n".formatted(elm(0),elm(1),elm(2)))
  }
}

display_table(newLst)

如何组合Lists of Lists并能够遍历它们并通过索引引用它们的正确方法是什么?

ckocjqey

ckocjqey1#

具体的答案是,你没有ListList,你有SerializableList,你不能索引到Serializable
但是你不需要索引到List中来获得前导元素,只需要使用match

val list1 = List("1", "2", "3")
val list2 = List("1", "1", "5")
val newLst = List(list1, list2)

def display_table(a: List[List[String]]) = {
  println("  A  B  C")
  for (elm <- a) {
    elm match {
      case a :: b :: c :: _ =>
        println(f"$a%3s$b%3s$c%3s")
      case _ =>
        println("Not enough elements")
    }
  }
}

display_table(newLst)

或者直接使用foreach而不是for

def display_table(a: List[List[String]]) = {
  println("  A  B  C")
  a.foreach{
    case a :: b :: c :: _ =>
      println(f"$a%3s$b%3s$c%3s")
    case _ =>
      println("Not enough elements")
  }
}

相关问题