【发布时间】:2021-10-23 05:34:23
【问题描述】:
假设我将val someMap = Map[String -> Map[String -> String]] 定义为:
val someMap =
Map(
("a1" -> Map( ("b1" -> "c1"), ("b2" -> "c2") ) ),
("a2" -> Map( ("b3" -> "c3"), ("b4" -> "c4") ) ),
("a3" -> Map( ("b5" -> "c5"), ("b6" -> "c6") ) )
)
我想把它展平成看起来像这样的东西
List(
("a1","b1","c1"),("a1","b2","c2"),
("a2","b3","c3"),("a2","b4","c4"),
("a3","b5","c5"),("a3","b6","c6")
)
最有效的方法是什么?我正在考虑创建一些辅助函数来处理每个 (a_i -> Map(String,String)) 键值对并返回
def helper(key: String, values: Map[String -> String]): (String,String,String)
= {val sublist = values.map(x => (key,x._1,x._2))
return sublist
}
然后将此函数平面映射到someMap。但这对我的新手 scala 来说似乎有些不必要,所以我想知道是否有更有效的方法来解析这个 Map。
【问题讨论】:
-
你的意思是
someMap.flatMap { case (a, m) => m.map { case (b, c) => (a, b, c) } }? -
或
for { (a, m) <- someMap; (b,c) <- m } yield (a,b,c)?