我正在寻找在Scala中将行转换为列的解决方案。经过几个小时的调查结果,我仍然无法弄清楚这一点。请查看下面的示例,了解输入和我的预期输出。
输入:
+--------+--------+--------+
| A | B | C |
+--------+--------+--------+
| 10 | 15 | 6 |
+--------+--------+--------+
输出:
+--------+--------+
| A | 10 |
+--------+--------+
| B | 15 |
+--------+--------+
| C | 6 |
+--------+--------+
答案 0 :(得分:0)
如果行数(列表)是任意的,您可以遵循以下模式:
for { (e1, e2) <- (list1 zip list2) } yield List(e1, e2)
否则可能是这样的:
def rows2cols[T](rows: List[List[T]]) = {
//assuming equal length skipping checks for emptiness:
for (el <- 0 until rows.head.length) yield {
rows.map(_(el))
}
}
rows2cols(List(
List(1,2,3),
List(4,5,6)
))
//Vector(List(1, 4), List(2, 5), List(3, 6))
当然,上面的代码非常简化,缺少对长度,空白等的所有必要检查。
答案 1 :(得分:0)
您可以在scala中使用List.transpose
。
val xs = List(List(1, 2, 3), List(4, 5, 6)).transpose
xs: List[List[Int]] = List(List(1, 4), List(2, 5), List(3, 6))