scala> val a = (1 to 8).toList.grouped(3).toList
a: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6), List(7, 8))
如何扭轉維和組元素a
這樣:
List(List(1, 4, 7), List(2, 5, 8), List(3, 6))
scala> val a = (1 to 8).toList.grouped(3).toList
a: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6), List(7, 8))
如何扭轉維和組元素a
這樣:
List(List(1, 4, 7), List(2, 5, 8), List(3, 6))
你可以試試這個方法,找出最長列表的長度,然後收集要素同時通過循環指數每個子列表:
val maxLength = a.map(_.length).max
// maxLength: Int = 3
(0 until maxLength) map (i => a flatMap (List(i) collect _))
// res45: scala.collection.immutable.IndexedSeq[List[Int]] =
// Vector(List(1, 4, 7), List(2, 5, 8), List(3, 6))
也許你想transpose方法,但官方收錄方法不支持不等長子列表。也許你也想嘗試:
Is there a safe way in Scala to transpose a List of unequal-length Lists?
應該使用GROUPBY法列表中的組元素。在你的例子中,你正在分組每三個元素。在我的解決方案,我現在用的是模運算符組的每個第三個元素的列表:
val a = (1 to 8).toList.groupBy(_ % 3).values.toList
a: List[List[Int]] = List(List(2, 5, 8), List(1, 4, 7), List(3, 6))
如果要排序的結果(如在你的例子),然後在結尾處添加sortBy():
val a = (1 to 8).toList.groupBy(_ % 3).values.toList.sortBy(_(0))
a: List[List[Int]] = List(List(1, 4, 7), List(2, 5, 8), List(3, 6))