获取Scala中嵌套映射的值

时间:2015-03-11 22:15:56

标签: scala dictionary nested

我有一张具有以下结构的地图:

Map[String, Map[String, String]]

是否有一种获得内部地图价值的优雅方式?

1 个答案:

答案 0 :(得分:6)

按正常方式做两次......

val m = Map("a" -> Map("b" -> "c"))
m("a")("b")  // c

第一个操作m("a")返回内部Map[String,String]。第二个操作that("b")返回返回Map的字符串。

它与:

相同
val m = Map("a" -> Map("b" -> "c"))
val m2 = m("a")  // Map(b -> c)
m2("b")          // c

另一方面,如果您认为他们的密钥可能不存在,那么请执行以下操作:

for {
  x <- m.get("a")   // x = Map(b -> c)
  y <- x.get("b")   // y = c
} yield y
// Some(c)

for {
  x <- m.get("a")   // x = Map(b -> c)
  y <- x.get("d")   // fails
} yield y
// None

for {
  x <- m.get("c")   // fails
  y <- x.get("d")   // doesn't run
} yield y
// None

对于您的示例,key2Option,就像m.get(key1)一样,因此您可以采用相同的方式处理它:

val key1: String = "a"
val key2: Option[String] = Some("b")
for { 
  value1 <- m.get(key1)
  k2 <- key2
  value2 <- value1.get(k2) 
} yield value2
// Some(c)