Soh*_*aib 0 scala nested hashmap
我有一个从JSON构建的某个地图,它有一些层次结构.例如:
"2015-05": {
"129557": {
"123456": 3,
"654321": 2,
"143526": 1
}
}
Run Code Online (Sandbox Code Playgroud)
它存储为嵌套映射.我想要一个简单的方法来访问密钥.我可以在每个键上进行多次检查,然后查看它是否存在,然后为第二个键执行,依此类推.然而,这似乎很麻烦.我选择做这样的事情:
def getNumFromMap(key1: String, key2: Int, key3: String): Option[Int] ={
try{
map(key1)(key2).get(key3)
}catch{
case e: Exception => None
}
}
Run Code Online (Sandbox Code Playgroud)
此功能可能会被执行数百万次.使用try/catch会降低执行速度吗?有没有更好的方法来实现相同的更快?
用于理解:
type MMMap[K1, K2, K3, V] = Map[K1, Map[K2, Map[K3, V]]]
def getFromMMMap[K1, K2, K3, V](
mmmap: MMMap[K1, K2, K3, V], k1: K1, k2: K2, k3: K3
) : Option[V] =
for {
mmap <- mmmap.get(k1)
map <- mmap.get(k2)
v <- map.get(k3)
} yield v
Run Code Online (Sandbox Code Playgroud)
对于MMMap[String, Int, String, Int]:
val mmmap = Map ("a" -> Map(1 -> Map("b" -> 2)))
scala> getFromMMMap(mmmap, "a", 1, "b")
res7: Option[Int] = Some(2)
Run Code Online (Sandbox Code Playgroud)