获取 Scala 中嵌套映射的值

2024-02-10

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

Map[String, Map[String, String]]

有没有一种优雅的方式来获取内部地图的值?


只需按照正常方式进行...两次即可。

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

对于你的例子,key2 is an 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取 Scala 中嵌套映射的值 的相关文章

随机推荐

  • SQL - 两个相互依赖的外键

    目前的结构如下 Table RowType RowTypeID Table RowSubType RowSubTypeID FK RowTypeID Table ColumnDef FK RowTypeID FK RowSubTypeID
  • 使用 otool(递归)查找应用程序所需的共享库

    我有一个 Cocoa 应用程序 它使用 otool 来查找应用程序正常运行所需的共享库 例如 假设我在使用 QTKit framework 的应用程序上运行 otool L 我得到了程序使用的共享库的列表 包括 Cocoa framewor
  • 无法加载文件或程序集“Microsoft.Web.Deployment,版本=9.0.0.0”

    我有 VS 2013 Ultimate 我的远程服务器是 IIS 7 5 并启用了远程部署 我已通过 Web Platform Installer 4 6 安装了 Web Deploy Tool 2 1 并且安装成功 当我尝试在发布工具上验
  • 如何告诉 DBD::mysql mysql.sock 在哪里?

    将 DBD mysql 与 DBI 一起使用 尝试连接到数据库时出现以下错误 DBI connect database mydb host localhost someuser failed Can t connect to local M
  • pyqtSlot 的功能[重复]

    这个问题在这里已经有答案了 我刚刚阅读了有关 pyqt5 按钮的教程here https pythonspot com en pyqt5 buttons 代码如下 有一个问题是关于button clicked connect self on
  • Grails - 跨控制器代码,在每个请求上执行

    有没有办法在调用任何控制器操作之前执行某些代码 我需要根据获取参数的值设置会话变量 而不考虑调用哪个控制器 当然 一旦完成此处理 请求需要按照其正常方式到达相应的控制器 操作 Thanks 听起来你想使用filter http grails
  • 树的等级是多少? (如树ADT)[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 据我所知 一个节点的度数是它拥有的子节点的数量 但是 我们如何定义树的度呢 基本上 树的度是它的子节点的总数 即源自它的节点的总数 树的叶
  • HTTP 响应何时完成?

    我正在 NET 中编写一个简单的 HTTP 客户端用于学习目的 我正在使用 NETSocket http msdn microsoft com en us library system net sockets socket aspx类 最终
  • 在工厂模式中使用反射[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在工厂模式中使用反射是一个好的实践吗 public class MyObjectFactory private Party party publ
  • 获取iscsi设备的目标IP地址

    假设我有一个 iSCSI 设备 dev sdat 我如何知道其目标的IP地址 目标驱动程序是 SCST 启动程序是 iSCSI 我只知道一个名为 dev sdat仅此而已 那么如何获取目标的IP地址呢 嗯 我并不为此感到自豪 但它完成了工作
  • 如何利用模板复制&移动构造函数和赋值运算符?

    考虑以下 C 代码以及我试图避免的失败尝试非模板复制和移动构造函数和赋值运算符的偏好 https stackoverflow com a 32539424 1915854 template
  • 如何基于EXPLAIN计划优化MySQL查询

    查看查询的EXPLAIN计划中 如何确定哪些地方可以进行最佳优化 我很欣赏首先要检查的事情之一是是否使用了好的索引 但除此之外我有点困惑 通过过去的尝试和错误 我有时发现执行连接的顺序可以是一个很好的改进来源 但是如何通过查看执行计划来确定
  • 使我的下拉菜单仅在使用键盘时即可访问

    目前 我的下拉菜单仅在用户将鼠标滑过时才会出现 我希望如果您按 TAB 键 下拉菜单将以相同的方式显示 我的菜单基于以下教程 http net tutsplus com tutorials html css techniques how t
  • WASAPI 重采样/Windows Media Foundation

    我正在使用 WASAPI 编写一个专业音频应用程序 此应用程序以独占模式运行流 并在两个方向上将音频数据重新采样为恒定格式或从恒定格式重新采样 一个在捕获设备和应用程序之间重新采样 另一个在应用程序和输出设备之间重新采样 MSDN 上有一个
  • Symfony2:无法在功能测试中模拟HTTP身份验证

    我正在尝试使用 symfony com 上描述的以下技术 http symfony com doc current cookbook testing http authentication html http symfony com doc
  • 如果数组已由 Range 分配,LBound 和 Ubound 会发生冲突

    CODE height objExcel1 Application WorksheetFunction CountA ob3 Columns 1 MsgBox height ReDim dataArray height 2 0 1 for
  • 实际上,为什么不同的编译器会计算出不同的 int x = ++i + ++i; 值?

    考虑这段代码 int i 1 int x i i 假设它可以编译 我们对编译器可能会对该代码执行的操作有一些猜测 both i return 2 导致x 4 one i回报2和其他回报3 导致x 5 both i return 3 导致x
  • -Dorg.apache.el.parser.COERCE_TO_ZERO 用于 glassfish?

    我们也有类似 Dorg apache el parser COERCE TO ZERO 的 glassfish 吗 不会 Glassfish 使用不同的 EL 实现 其默认行为与您设置时的行为相同 Dorg apache el parser
  • 使用 Gson 反序列化有时是字符串,有时是对象

    我需要将这种类型的 JSON 数据解析为 java 对象 id 1 blob example text id 2 blob to 1234 from 4321 name My Name 我正在使用 Gson 并且不知道如何解决这个特定问题
  • 获取 Scala 中嵌套映射的值

    我有一张具有以下结构的地图 Map String Map String String 有没有一种优雅的方式来获取内部地图的值 只需按照正常方式进行 两次即可 val m Map a gt Map b gt c m a b c 第一次手术m