基本上想做标题说明的事情。
我有一个List[(Long, String)]
,其中Long
是行号,String
是列名。我想将元组列表输出为字符串列表,每个字符串的格式如下:
index : row, column
例如
1: 3, column1
2: 7, column3
...
然后我想把它压扁
我要在执行此操作时创建索引。因此,我想我会在列表上使用zipWithIndex
,然后将其折叠。我仍然不确定折叠。我知道您给它一个初始值,然后递归地返回该初始值和一个运算的乘积(对吗?)。但是,我确实很难理解我将如何做我已经解释过的事情。任何建议/帮助/解释将非常有帮助。
recordList.zipWithIndex.fold(List.empty[(Int, String)]) {
case (... that record in recordList exists?...) =>
s"${index.toString} : $row , $column \n" // to be single record in final list
}.mkString(" \n")
很显然,上面的代码不起作用。这只是我想尝试做的一个例子。
答案 0 :(得分:3)
尝试
recordList
.zipWithIndex
.map { case (v, index) => s"$index: ${v._1}, ${v._2}" }
.mkString("\n")
输出
0: 3, column1
1: 2, column2
2: 7, column3
给予
val recordList: List[(Long, String)] = List((3, "column1"), (2, "column2"), (7, "column3"))
使用foldLeft试试
recordList.foldLeft[(String, Iterator[Int])](("", LazyList.iterate(0)(_ + 1).iterator)) {
case ((acc, index), v) => s"$acc \n ${index.next}: ${v._1}, ${v._2}" -> index
}._1
答案 1 :(得分:1)
您不需要foldLeft
,只需一个简单的map
即可:
val l: List[(Long, String)] = List((3L, "col1"), (7L, "col2"))
l.zip(Stream from 1).map{ case (value, index) => s"$index: ${value._1}, ${value._2}" }.mkString("\n")
请注意,我通常更喜欢zip(Stream from 1)
而不是zipWithIndex
,并在以后手动添加1
。找到更清晰的!