Scala - 元组列表(长,字符串)到字符串列表到单个字符串



基本上想做标题所说的。

我有一个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。找得更清楚!

最新更新