访问嵌套地图的值

时间:2013-06-05 05:43:38

标签: scala

我有一张地图

val m = Map(1->13, 2->Map(3->444, 4-> List("aaa", "bbb")))

我想得到它的嵌套值:

// these all lead to an error
m.get(2)(3)
m.get(2).get(3)
m.get(2).get.get(3)

我该怎么做?

2 个答案:

答案 0 :(得分:5)

您有lost type information

你实际上可以做你想做的事,但这不是类型安全的。

m.get(2).flatMap{ case m2: Map[Int, _] => m2.get(3) }

由于您丢失了必须明确转换的类型信息,因此如果您想获取list的元素,您应该执行以下操作:

m.get(2).flatMap{ case m2: Map[Int, _] => m2.get(4) }.map{ case l: List[_] => l(1) }

您应该尝试保存类型信息。至少你可以使用Either

答案 1 :(得分:1)

您有一个map,其key-value对的类型不一致。因此,不可能有一个普遍的答案。

首先m.get(2)返回Option[Any]。做m.get(2)(3)基本上是在尝试:

val option = m.get(2) //option is of type Option[Any]
option(3) //error

因此你需要这样做:

m.get(2) match {
case Some(i) => i match {
     case j:Map[Any,Any] => j(3)
     }
 }

这种东西。