Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 转置大小不均的列表_Scala_List - Fatal编程技术网

Scala 转置大小不均的列表

Scala 转置大小不均的列表,scala,list,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

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

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
用于处理长度小于正在处理的当前索引的项目。这些案例返回的是

要使用
尝试
,您需要导入:

import scala.util.Try
一种方法是使用,尽管这将涉及列表的多次遍历:

val l = List("ABC", "E", "GHI")
val maxSize = l.map(_.size).max // 3
val transposed = l.map(_.toList).map(_.padTo(maxSize, ' ')).transpose
// List[List[Char]] = List(List(A, E, G), List(B,  , H), List(C,  , I))

非常感谢你^^您的返回类型是
Seq[List[Any]]
,因为您将
Char
元素与
String
OrElse混合。另外,
试试看
不需要:
.toSeq.lift(i).getOrElse(“”)
我确实喜欢你的
lift
建议。