我在转置元素数量不均匀的列表时遇到了一些问题。假设我们的数据是:
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/