在 Scala 中获取嵌套映射的值
Get value of nested maps in Scala
我有一个具有以下结构的地图:
Map[String, Map[String, String]]
是否有一种优雅的方法来获取内部映射的值?
以正常方式进行...两次。
val m = Map("a" -> Map("b" -> "c"))
m("a")("b") // c
第一个运算m("a")
returns内部Map[String,String]
。第二个操作that("b")
returns那个返回Map里面的String
等于:
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
对于你的例子,key2
是一个 Option
,就像 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)
我有一个具有以下结构的地图:
Map[String, Map[String, String]]
是否有一种优雅的方法来获取内部映射的值?
以正常方式进行...两次。
val m = Map("a" -> Map("b" -> "c"))
m("a")("b") // c
第一个运算m("a")
returns内部Map[String,String]
。第二个操作that("b")
returns那个返回Map里面的String
等于:
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
对于你的例子,key2
是一个 Option
,就像 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)