如何在Scala中压缩多个列表?

时间:2017-06-12 20:54:57

标签: scala

我们举一个例子,我有一个矩阵:Array [Array [Int]],m * n,我想压缩m个列表(行)。

输入m * n矩阵:

val list = List( //m Lists
    List(1,2,3,...,n), //n Int in each List
    List(11,12,13,...,n),
    ...,
    ...,
    ...,
    List(91,92,93,...,n)
)

输出应该是:

List( // n Lists
    List(1,11,...,91), //m Int in each List
    List(2,12,...,92),
    List(3,13,...,93),
    ...,
    ...,
    ...,
    List(n,n,...,n)
)

在python中,我可以简单地执行

map(list, zip(*matrix))

我已经看过一些解决方案,但是,它们只适用于某些计数的压缩列表。 Scala中是否有一个简洁的解决方案,就像Python一样?

更新: 感谢回答,我发现Scala中的关键字是转置,请检查类似的问题:How to perform transpose on List of Lists in scala?

1 个答案:

答案 0 :(得分:0)

如果所有子数组具有相同数量的元素,则可以使用Array.transpose方法:

val arr = Array(Array(1,2,3), Array(4,5,6))
// arr: Array[Array[Int]] = Array(Array(1, 2, 3), Array(4, 5, 6))

arr.transpose
// res8: Array[Array[Int]] = Array(Array(1, 4), Array(2, 5), Array(3, 6))