从地图到CSS Scala的优雅方式(展平地图)

时间:2018-10-28 20:09:28

标签: scala dictionary flatmap

我有一张看起来像这样的地图:

val m1 = Map(IND1 -> List((IND1,List((AA,11), (BB,12)))), 
  IND2  ->List((IND1,List((AA,42), (BB,80)))))

结果格式为:

List((IND1,11,12),(IND2,42,80))

我尝试在值上使用flatMap,但它不起作用,而使它起作用的唯一方法是:

m1.mapValues(x => x.head._2).map(x =>(x._1,x._2(0)._2,x._2(1)._2))

这给了我正确的格式,但是我知道必须有一个更好,更优雅的方法。请帮助

2 个答案:

答案 0 :(得分:1)

您可以按如下所示对Map的值使用模式匹配/解构

val m1 = Map(
  "IND1" -> List(
    ("IND1", List(("AA", 11), ("BB", 12)))
    //(k,    (first        :: second  :: Nil)
  ),
  "IND2" -> List(
    ("IND1", List(("AA", 42), ("BB", 80)))
    //(k,    (first        :: second  :: Nil)
  )
)

val results = m1.map {
  case (key, ((k, (f :: s :: Nil)) :: Nil)) =>
    (key, f._2, s._2)
}

println(results) // List((IND1,11,12), (IND2,42,80))

您可以进一步解构fs以及元组,

val results = m1.map {
  case (key, (_, (_, first) :: (_, second) :: Nil) :: Nil) =>
    (key, first, second)
}

答案 1 :(得分:0)

void Cat::speak()