基本上想做标题所说的。
我有一个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")
显然上面的代码不起作用。这只是我认为我想尝试和做的一个例子。
尝试
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"))
使用折叠左尝试
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
不需要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
。找得更清楚!