查找嵌套映射中特定键的值

2024-02-17

在 Clojure 中,如何找到可能位于嵌套映射结构深处的键的值?例如:

(def m {:a {:b "b"
            :c "c"
            :d {:e "e"
                :f "f"}}})

(find-nested m :f)

=> "f"

Clojure 提供tree-seq http://conj.io/store/v0/org.clojure/clojure/1.6.0/clj/clojure.core/tree-seq对任何值进行深度优先遍历。这将简化查找嵌套键所需的逻辑:

(defn find-nested
  [m k]
  (->> (tree-seq map? vals m)
       (filter map?)
       (some k)))

(find-nested {:a {:b {:c 1}, :d 2}} :c)
;; => 1

此外,找到所有匹配项就变成了替换的问题some with keep:

(defn find-all-nested
  [m k]
  (->> (tree-seq map? vals m)
       (filter map?)
       (keep k)))

(find-all-nested {:a {:b {:c 1}, :c 2}} :c)
;; => [2 1]

请注意,地图与nil值可能需要一些特殊处理。


Update:如果你看上面的代码,你会发现k实际上可以是一个提供更多可能性的函数:

  • 查找字符串键:

    (find-nested m #(get % "k"))
    
  • 查找多个键:

    (find-nested m #(some % [:a :b]))
    
  • 在整数映射中仅查找正值:

    (find-nested m #(when (some-> % :k pos?) (:k %)))
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找嵌套映射中特定键的值 的相关文章

随机推荐

  • 如何使用 codeigniter 查询获取每个产品的平均评分?

    我有评级表 其中对用户给出的每个产品进行评级 我正在检索所有评级记录 但同时我想根据每个产品获得平均评级 但我无法获得输出 Query this gt db gt select ratings this gt db gt select se
  • Python:名称解析;函数 def 的顺序

    我有一个非常简单的例子 usr bin env python a 1 NameError name a is not defined b 1 NameError name b is not defined c 1 NameError nam
  • Segue 未获取选定的行号

    我正在将数据从表视图控制器传递到详细视图 我尝试使用indexPath row直接在我的prepareForSegue方法 但是它显示错误 使用未解析的标识符 indexPath 因此 在搜索网络后 我设置了变量indexOfSelecte
  • 如何在 Android 版 Eclipse 中启用 LogCat/Console?

    在 Android 中编写一个简单的程序时 我错误地关闭了 LogCat 窗口 我想知道如何再次显示它 在 Eclipse 中 转到 窗口 gt 显示视图 gt 其他 gt Android gt Logcat Logcat 只是模拟器或设备
  • Excel VBA 在表格下方添加数据时扩展表格

    我在 Excel 中有一个表格 当用户在表格后添加数据时 该数据不属于该表格 我创建了一个可以执行来扩展表的代码 代码如下 Sub ExtendTableToLastRow Sheets Update Select If ActiveShe
  • 如何使用 Woocommerce WC_AJAX 类

    我正在开发一个基于 Wordpress WooCommerce 的商店 我使用ajax来调用数据 但我是通过 wp admin admin ajax php 在 function php 文件中使用我自己的函数来完成此操作 昨天我在 woo
  • ruby:“p *1..10”中的星号是什么意思

    the line p 1 10 做完全相同的事情 1 10 each x puts x 这将为您提供以下输出 ruby e p 1 10 1 2 3 4 5 6 7 8 9 10 例如 在使用 textmate 时 这是一个很好的快捷方式
  • 如何在ListView中正确使用TextSwitcher?

    My TextSwitcher对于每条记录ListView应显示第一个值 text1 然后是另一个值 text2 然后再次首先值 依此类推 仅当以下情况时才会发生text2不是空的 否则text1应始终显示 没有任何更改和动画 我已经创建了
  • log4j2.xml中每个包的Log4J不同日志级别

    我有一个 Java Web 应用程序log4j2 xml我需要为每个包设置不同的级别 例如 com myexample firstmodule 这应该是INFO level com myexample secondmodule 这应该是TR
  • 如何在 Python 中停止打印 OpenCV 错误消息

    Same as 这个问题在这里 https stackoverflow com questions 17567808 how to suppress opencv error message 17575610 17575610 除了 Pyt
  • 使用 DOM 解析 HTML 时保留文件偏移量?

    我要修改 img src 格式不太畸形的 HTML 中的属性 WordPress 帖子 我知道我可以采取简单的方法并使用正则表达式 但我担心穿着蓝色毛茸茸的衣服的人会在我睡梦中困扰我 https meta stackexchange com
  • 如何将字符串数据框列转换为日期时间作为年和周的格式?

    样本数据 Week Price 2011 31 1 58 2011 32 1 9 2011 33 1 9 2011 34 1 9 我有一个像上面这样的数据框 我想将 周 列类型从字符串转换为日期时间 My Code data Date Ti
  • 动态郎。运行时与反射

    我计划在我的新项目中使用动态关键字 但在介入之前 我想了解使用动态关键字而不是反射的优点和缺点 在专业人士的帮助下 我可以找到关于动态关键字的信息 可读 可维护的代码 更少的代码行 虽然与使用动态关键字相关的负面影响 我听到的是 影响应用程
  • 将 django 查询集转换为数组

    我想将 django 查询集转换为数组 例如 firstnames Users objects values firstnames 得到看起来像的结果 firstnames Nancy Andrew Janet Margaret Steve
  • 以下哪个 SQL 查询会更快?两个表或连续查询的联接?

    我这里有两张桌子 ITEMS ID DETAILS OWNER USERS ID NAME Where ITEMS OWNER USERS ID 我列出了这些物品及其各自所有者的姓名 为此 我可以在两个表上使用联接 或者我可以选择所有 IT
  • Conda 报告 PackagesNotFoundError: python=3.1 for reticulate 环境

    我正在尝试在 R 中使用 python 包 但我不断收到相同的错误 ImportError cannot import name read csv from pandas unknown location 我也不能使用 py install
  • 尝试改进 haskell 中当前处理列表的丑陋代码

    我正在尝试在 Haskell 中实现一个函数 该函数将采用任意整数列表xs和一个整数k 并返回一组列表k在所有可能的位置 例如 对于一个xs 0 1 and k 2 我们会有 myFunction 0 1 2 2 0 1 0 2 1 0 1
  • 作为配置属性的不可变类型

    是否可以使用不可变类型作为 NET 配置 API 的配置属性 假设我有一个名为 MyClass 的不可变类型 public class ImmutableClass private readonly int value public Imm
  • 弹性盒| Flex 项目被推出包含 div (屏幕外)

    我正在使用弹性盒布局 https css tricks com snippets css a guide to flexbox 设置过去任务列表的样式 任务描述和时间的长度总是变化很大 一切看起来都很棒 直到输入足够长的任务描述以换行到第二
  • 查找嵌套映射中特定键的值

    在 Clojure 中 如何找到可能位于嵌套映射结构深处的键的值 例如 def m a b b c c d e e f f find nested m f gt f Clojure 提供tree seq http conj io store