scala - 转置大小不均的列表

标签 scala list

我在转置元素数量不均匀的列表时遇到了一些问题。假设我们的数据是:

ABC
E
GHI

我希望我的列表是:

List(List('A','E','G'), List('B',' ','H'), List('C',' ','I'))

我无法设法在需要的地方找到空白区域 (' ')。使用我的代码:

val l = List("ABC", "E", "GHI")
println(((l map (_.toArray)) toArray).transpose map (_.toList) toList)
// I get: List(List('A', 'E', 'G'), List('B', 'H'), List('C', 'I'))

一个解决方案可能是获取最长的行并在其余行中添加空格,但它确实不干净。有没有简单的解决方案?

最佳答案

这是输入列表 l 的代码高尔夫解决方案:

(0 until l.map(_.size).max).map(i => l.map(s => Try(s(i)).getOrElse(' ')))

返回:

 Vector(List(A, E, G), List(B,  , H), List(C,  , I))

这个:

  • 检索输入列表中字符串的最大长度。
  • 从0开始循环直到输入列表中字符串的最大长度
  • 在每个循环中,它获取给定索引处每个元素的字符。

Try 用于处理长度小于当前正在处理的索引的项目。这些情况会返回 ""

要使用Try,您需要导入:

import scala.util.Try

关于scala - 转置大小不均的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51248245/

相关文章:

python - python 中 "lambda"函数的模糊性

list - 唯一元素存储的数据结构

java - 使用 Arrays.asList() 初始化列表的最佳方法是什么

scala - 可观察的异常处理

scala - 如何在ScalaTest中使用ScalaCheck的收集和分类?

scala - 弗林克 : How to write DataSet to a variable instead of to a file

python - 如何通过从用户输入中删除哪个值来从列表(整数和字符串)中删除整数?

java - 使用带迭代器的 mapPartition 保存 spark RDD

scala - sbt 重复数据删除 : different file contents found in the following:

c# - 从列表中删除 n 行