我有一张地图
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)
我怎么做?
我有一张地图
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)
我怎么做?
您丢失了类型信息。
你实际上可以做你想做的事,但它不是类型安全的。
m.get(2).flatMap{ case m2: Map[Int, _] => m2.get(3) }
由于您丢失了类型信息,因此您必须显式转换,因此如果您想获取列表的元素,您应该执行以下操作:
m.get(2).flatMap{ case m2: Map[Int, _] => m2.get(4) }.map{ case l: List[_] => l(1) }
您应该尝试保存类型信息。至少你可以使用Either
.
你有一个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)
}
}
这种东西。