我有一個List[(List[A], List[R])] -分別由物件 A 和 R 的兩個串列組成的元組串列。
例如,List[([A1, A2], [R1, R2, R3])]
我想要做的是將它轉換List[(List[A], R)]為每個 R 物件的 a 。所以基本上,List[Tuple2]在 R 物件為 A 物件串列“扁平化”的地方創建一個。
示例- 對于上面的示例,整個串列應分為 3 個子串列,如下所示:??
List[([A1, A2], R1)]
List[([A1, A2], R2)]
List[([A1, A2], R3)]
給定任何 A 元素串列,我需要獲取每個 R 元素。這樣做的原因是 A 元素可以包含嵌套的子 A元素和多個 R 元素,所以我需要將每個 R 分離為 List[A] 的一部分。
到目前為止,這是我嘗試過的,但我不知道如何做我問題的“扁平化”部分:?
lazy val rules: List[(List[A], R)] = {
//listOfA = List[A1, A2, A3,…]
//listOfR = List[R1, R2, R3, …]
val fromA = listOfA.map { A => (List(A.description) A.subGroups.map(_.description), A.rules) } // Currently: List[(List[A], List[R])] Required: List[(List[A], R)]
val fromR = listOfR.map { r => (Nil, r) } // List[(Nil, R)]
fromA fromR
}
這是 A 案例類的定義:
case class A(description: Descriptor, rules: List[R], subGroups: List[A])
……案例類 R 直接包含 List[R]。在fromR定義的情況下,不存在 List[A],因此用 Nil 代替以表示空白List[A]。
如您所見,因為val fromR我可以像在 fromR 中所做的那樣通過映射來獲取單個 R。我需要從中獲得組合結果fromA fromR(因為我的輸入可能包含A中的 R和直接 R 的混合)。 ?
我的問題是fromA定義。到目前為止,我只能得到每個 List[A] 的 List[R]。我如何為每個 List[A] 分離每個 R… 問題主要在于A.rules定義。
請幫忙,因為我是 Scala 的新手。
uj5u.com熱心網友回復:
實際上,在解釋了問題之后,我有點迷失在這個問題中,但我假設您想將 a 轉換List[(List[A], List[R])]為 a List[(List[A], R)]for each Rin the list。一個簡單易行的方法是使用 for comprehensions:
val result: List[(List[A], R)] = for {
(as, rs) <- firstList
r <- rs
} yield (as, r)
您也可以使用等效方法,但使用flatMap, map:
val result: List[(List[A], R)] = firstList.flatMap { case (as, rs) =>
rs.map {r =>
(as, r)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/536740.html
標籤:列表斯卡拉数据结构展平
上一篇:如何從各個值創建資料框和模式
