如图所示:
scala> List(List(1, 2), List(3, 4), List(5, 6)) transpose
res7: List[List[Int]] = List(List(1, 3, 5), List(2, 4, 6))
scala> List(List(1, 2), List(3), List(5, 6)) transpose
res8: List[List[Int]] = List(List(1, 3, 5), List(2, 6))
scala> List(List(1, 2), List(3, 4, 7), List(5, 6)) transpose
java.lang.IndexOutOfBoundsException: 2
at scala.collection.immutable.Vector.checkRangeConvert(Vector.scala:104)
...
这种行为是故意的吗?如果是这样,为什么?
编辑:尽管问题的一部分已经澄清,但我仍然想提出一种接受不规则尺寸的方法的版本(可能有不同的名称)。
答案 0 :(得分:3)
是的,这是故意的。它无法快速尝试使用不规则尺寸。查看错误报告https://issues.scala-lang.org/browse/SI-3399。另请参阅如何为您的案例编写转置:Is there a safe way in Scala to transpose a List of unequal-length Lists?
它适用于旧方法。其中7被默默忽略,而在前面的例子中,所有数字都显示为结果。我想这是不可取的:
scala> List.transpose(List(List(1, 2), List(3, 4, 7), List(5, 6)))
warning: there were 1 deprecation warnings; re-run with -deprecation for details
res4: List[List[Int]] = List(List(1, 3, 5), List(2, 4, 6))