scala - 在 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 来实现这一点?
解决方案
可以使用尾递归来解决
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, ))
推荐阅读
- flutter - 如何使用 Flutter 将值从 firebase 设置为 TextFieldForm
- c# - C# 中的人口数据库...程序未运行但没有错误
- node.js - MongooseError [MongooseServerSelectionError]:连接
至 52.206.125.240:27017 已关闭 - python - 使用 [-1] 获取列的最后一行?
- hadoop - 如何将 YARN 应用程序日志保存在本地文件系统而不是 HDFS 中?
- python - 如何在 Python Dataframe 中选择具有基于使用列的函数的条件的行
- android - 多次调用observe()
- python - Python JSON TypeError:列表索引必须是整数或切片,而不是str
- jquery - 我无法使用 jquery、node、js 和 mysql 数据库在输入文本框的下拉列表中获取自动完成功能的值列表
- java - Apache POI Word 获取表中每页的最后一行索引