首页 > 解决方案 > 在 Scala 中加入多个列表

问题描述

我有一系列列表(让我们假设以下 3 个),其中第一个元素都代表一个主键。

var A= List((1,"A"), (2,"B"), (3,"C"))
var B= List((1,"AA"), (2,"BB"), (3,"CC"), (4,"DD"))
var C= List((1,"AAA"), (3,"CCC"))

我想将他们完全加入到一个新的列表中,如下所示。您可以假设结果元组中的项目数预定为 4

(1, "A", "AA", "AAA")
(2, "B", "BB", ""   )
(3, "C", "CC", "CCC")
(4, "" , "DD", ""   )

我怎样才能以一种功能性的方式并使用 Scala 来实现这一点?

标签: scala

解决方案


可以使用尾递归来解决

var a= List((1,"A"), (2,"B"), (3,"C"))
var b= List((1,"AA"), (2,"BB"), (3,"CC"), (4,"DD"))
var c= List((1,"AAA"), (3,"CCC"))

val lst: List[List[(Int, String)]] = List(a, b, c)

def fun(input: List[List[(Int, String)]]): List[Any] = {
@tailrec
def itr(acc: List[Any], inp: List[List[(Int, String)]], key: Int, maxKey: Int): List[Any] = {
  key match {
    case x if x > maxKey => acc
    case _ =>
      itr(acc ::: List(key :: inp.map(itemLst => {
      itemLst.find(_._1 == key).map(_._2).getOrElse("")
      })), inp, key + 1, maxKey)
  }
}
itr(List(), input, input.head.head._1, input.map(_.length).max)
}

println(fun(lst))

输出是

List(List(1, A, AA, AAA), List(2, B, BB, ), List(3, C, CC, CCC), List(4, , DD, ))

推荐阅读