如何在 Clojure 中更新原子的向量元素?

2024-04-22

我有一个矢量原子,我想更新一个本身就是地图的条目。

(def vector-atom (atom []))
(swap! vector-atom conj { :id 1 :name "myname" })

我该如何只更新该成员?

在可变的 Java 领域的思维方式中,我会做这样的事情:

(defn find-by-id [id]
  (first (filter (fn [entry] (= (:id entry) id))
         @vector-atom)))

(defn update-entry [id new-entry]
  (let [curr-entry (find-by-id id)
        merged-entry (merge curr-entry new-entry)]
    ###set the curr-entry to merged-entry###))

如果向量的索引对应于:ids,你可以使用类似的东西

(swap! vector-atom update-in [id] merge new-entry)

如果没有,那么你有两个选择:(1)使用 id -> map 的映射而不是向量和上面的简单解决方案,(2)使用向量和类似以下内容:

(swap! vector-atom
       (fn [v]
         (let [i (find-index-of-entry v)]
           (assoc v i (merge (nth v i) new-entry)))))

find-index-of-entry可以是向量的简单线性扫描,或者,如果项目按以下顺序排序:id,二分查找。对于较长的向量来说,线性扫描当然效率极低(因此,如果向量可能较长,则按照上述(1)切换到映射是一个值得考虑的解决方案)。

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

如何在 Clojure 中更新原子的向量元素? 的相关文章

  • clojure lein(读取行)stdin 问题

    所以常规的 clojure repl 工作得很好 read line 收集输入 然后回显它 使用lein repl但是 它永远不会回显任何输入字符 也不允许我从任何标准输入读取命令返回 我确信这与重新绑定有关in 但想知道是否有解决方法 修
  • 如何将 Clojure memfn 与 Java 构造函数一起使用?

    我想使用 Java 构造函数作为一流的 Clojure 函数 我的用例是将字符串序列转换为具有单个字符串构造函数的 Java 对象序列 简单的Java对象 public class Foo public Foo String aString
  • Clojure:在 let 绑定中展开 var

    我想在let不同功能的形式 比方说 def common assign x 10 y 20 一种方法是用eval eval defn foo let common assign hello world balala 问题是现在你必须引用所有
  • 为什么在基于 Lisp 的语言中习惯上将许多右括号放在一行上?

    通常代码如下所示 one thing another thing arg1 f arg5 r another thing arg1 f arg5 r 为什么不喜欢这样 one thing another thing arg1 f arg5
  • Java 互操作——Netty + Clojure

    我正在尝试通过 clojure 使用 netty 我可以启动服务器 但是它无法初始化接受的套接字 下面分别是错误消息和代码 有谁知道什么是 或可能是错误的 我相信问题在于 Channels pipeline server handler T
  • 为什么我不能将 Clojure 的 :^const 与 Java 字节数组一起使用?

    Using lein repl使用 Clojure 1 4 0 我可以定义一个 constJava 字节数组的 但我不能用它做任何事情 user gt def x byte array map byte 0 1 2 3 user x use
  • Clojure:在特定命名空间中启动 repl

    我安装了 boot clj 并且希望能够在外部编辑器中编辑 clj 文件 并单独运行一个命令行 REPL 我可以从中调用我在 clj 文件中更改的函数 不需要特殊的重新加载命令 另一件事是我不想手动键入命令来包含命名空间 我只想运行一个将我
  • 无法使用 Leiningen 构建 jar

    我正在尝试使用 Intellij 的 Cursive 中的 Leiningen 插件从我的基本 Clojure 项目中制作一个独立的 jar 为了创建项目 我刚刚创建了 project clj 文件 将其打开 Cursive 提出将其导入为
  • 在环形应用程序中捕获异常的惯用方法

    处理环形应用程序中的异常的惯用方法是什么 我想捕获异常并返回 500 页 我怎么做 我在下面的代码中使用了 Mustache 但是它不起作用 def my app try app wrap logger true wrap keyword
  • Clojure 函数 - 返回最后一条语句之前计算的值

    我有一些用 Clojure 编写的测试 这是一个简单的例子 defn test1 start server run pvt and expect PVT 0 stop server 我想返回 run pvt and expect 的结果 但
  • 好的 Clojure 代码示例? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在第一次查看 Clojure 我发现查看 Clojure 核心库的 doc xxx 和 sourc
  • 为什么这个 Clojure 减速器 r/fold 没有提供任何性能优势?

    我想知道为什么下面的代码在 r fold 的情况下没有提供加速 我对减速器有什么误解吗 我在一个相当慢的 尽管有 2 个核心 Ubuntu 12 04 开发盒上运行它 通过 emacs 和 lein 运行 每个都有相同的结果 require
  • 用于正则表达式匹配及其在字符串中的位置的紧凑 Clojure 代码

    斯图尔特 哈洛威举了个例子 re seq w The quick brown fox 作为在 Clojure 中查找正则表达式匹配项的自然方法 在他的书中 这种构造与匹配器上的迭代进行了对比 如果人们关心的只是一份比赛列表 那就太好了 但是
  • 使用 ProGuard 混淆 clojure uberjar

    我想知道是否有人有使用 proguard 混淆他们的 leiningen 编译的 uberjar 的经验 我已经尽力在谷歌上寻找解决方案 但找不到真正的答案 我想知道这是否可能 我一直在尝试混淆默认的 lein 项目 这是 core clj
  • 如何应用Clojure? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在学习 Clojure 我真的很喜欢它的一些功能 是时候考虑一 些真正的 宠物项目 了 我意识到我不知道如何真正做到这一点use克
  • Clojure 宏:从地图创建本地变量 [重复]

    这个问题在这里已经有答案了 我有这个示例代码 我通过迭代映射的键值对来创建变量 defmacro block bindings body let mapcat fn k v if symbol k k symbol name k v bin
  • Clojure读行函数问题

    我试图在我的 Clojure 程序中获取控制台输入 但是当它到达程序的该部分时它给我这个错误 Exception in thread main java lang ClassCastException clojure lang LineNu
  • Emacs/Swank/Paredit for Clojure 的温和教程

    我要转向 Emacs 来工作Clojure http en wikipedia org wiki Clojure Lisp 为了能够执行以下操作 我需要在 Emacs 上设置哪些信息 自动匹配 生成相应的右括号 自动缩进 Lisp Cloj
  • 获取调用表单的名称空间

    我想要一个宏this ns这样它就会返回调用它的位置的名称空间 例如 如果我有这段代码 ns nstest main require nstest core as nstest defn ns str x gt x getName name
  • 无法删除 IntelliJ/Cursive 中的括号

    我正在使用 IntelliJ Cursive 编写 Clojure 我发现 删除括号的唯一方法就是将其中的内容完全删除 然后才能将括号删除 例如 假设我有以下代码 list 我只想删除左括号 一旦我在左括号上按退格键 IDE 就会忽略此行为

随机推荐

  • 使用 SolidJS 中的 fetch API 渲染远程数据

    我是一个使用 Solid JS 以及就此而言的 JS 的新手 并且在尝试填充 自定义 时遇到了看似奇怪的行为 table 使用来自 API 的数据的组件fetch 这是我的 table import Component For from s
  • 为什么我的 SqlConnection 在关闭后仍保留在 SSMS 进程列表中?

    我有一个 C 控制台应用程序 代码如下 using var cn new SqlConnection cn ConnectionString Data Source localhost Integrated Security True Pe
  • 使用 Xcode 的命令行构建工具进行存档(xcodebuild archive)

    用于构建 Xcode 项目的命令行工具 xcodebuild 在 Xcode 4 中提供了一个新的构建操作 archive From man xcodebuild archive Archive a scheme from the buil
  • SwiftUI Focus State API 环境变量不起作用

    当我们想要观察 SwiftUI 文本字段的焦点状态时 环境值 isFocused 似乎不起作用 除了将值传递给 TextFieldStyle 的 init 我们必须为每个 Textfield 执行此操作 之外 还有其他方法可以做到这一点吗
  • 如何重置html中选定的索引下拉值?

    我需要在提交表单后为下拉菜单设置 selectedindex 0 我尝试如下 filterByName prop selectedIndex 0 filterByName selectedIndex 0 filterByName get 0
  • Oracle 查询和聚合函数

    我假设在oracle 中有表名employee 1 如果 mobile no 和 sim no 相同 我想选择最大 start date 我已经尝试过 但没有成功 请帮忙 下面是employee 1表 Mobile No Sim NO St
  • 将字符串数组绑定到 datagridview 的列

    我正在设计一个有 datagridview 的 winform 我正在为该 datagridview 分配一个数据表 DataTable dt new DataTable dt Columns Add items typeof string
  • 学习 MacRuby 的好资源 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我不懂 Ruby 但我有兴趣学习 MacRuby 您会推荐什么作为您的最佳资源 书籍 博客 网站 Fo
  • 实体框架迁移问题

    我在 EF 迁移方面遇到问题 特别是让 Enable Migrations 命令发挥作用 当我在包管理器控制台中执行命令时 收到以下错误 System Management Automation PSArgumentException 找不
  • ASP.NET Core 2.0 站点 - FileIOException System.Runtime

    一位同事正在为我们的下一份工作整理一些框架项目 这些项目在他的机器上运行良好 并且我们的其中一台开发服务器正在托管开发实例 由于我们刚刚建立 这些项目或多或少是空的 由单个静态 html 文件组成 这些项目在我的开发机器上构建得很好 但一旦
  • Python 3.x 列表理解 VS 元组生成器

    我想使用内存 速度或其他什么原因吗 tuple i for i in range 5000 代替 i for i in range 5000 如果我不介意元组的不变性 基本上 列表理解比生成器表达式更快 因为 它的迭代在 C 中执行 请阅读
  • 按 HTML 实体分割字符串?

    我的字符串包含很多 HTML 实体 就像这样 大家好 大家好 我想按 HTML 实体将其拆分为 Hello大家 there 有人可以建议我一种方法吗 可能正在使用正则表达式 看起来你可以分开 正则表达式 也就是说 分隔符是以以下开头的字符串
  • 货币数据类型精度 - SQL Server (SSMS)

    在sql server management studio中 数据类型 金钱 当我输入带有小数的金额时 它会自动添加零以填充到百分之一 如何确定小数点后的空格数 点后面零的个数称为precision的一种数据类型 这money数据类型有一个
  • Swagger Editor 3.8 示例不适用于参考数组模式

    这个问题是后续问题这个类似的 https stackoverflow com q 52595690 1571426 正如 Helen 要求提出一个新问题 数组类型模式似乎只接受 示例 而不接受 示例 以下架构会产生错误编辑器 swagger
  • Android 8 本机库崩溃

    自从 Android 8 Oreo 推出以来 我们的应用程序一直在不同的地方崩溃 所有 Play 商店崩溃报告都显示本机崩溃 最常出现的一个似乎是在本机库中 最常崩溃的设备是 Google Pixel Pixel XL 也出现过一些崩溃 我
  • Javascript 随机定位 Div 且不重叠它们

    我一直在研究一个随机的概念想法 即让 6 个云出现在一个页面上 并从数据库中提取随机评论 这部分很简单 但我发现确保 6 朵云不相互重叠非常困难 我对碰撞检测进行了很多研究 发现在将新的 随机定位 div 放置在页面上之前 没有真正合适的方
  • 我的车库里真的有一辆车吗? [复制]

    这个问题在这里已经有答案了 我是 Java 编程的新手 正在尝试掌握 OOP 所以我构建了这个抽象类 public abstract class Vehicle 和2个子类 public class Car extends Vehicle
  • 无法解析“adb version”的输出

    我使用 Ubuntu 11 10 和 Eclipse 进行 Android 开发 我已经创建了一个新项目 但它包含错误 Failed to parse the output of adb version 如果有人知道我该如何解决这个问题 我
  • 如何在swift中插入子层?

    我正在创建一个视图并向其添加渐变层 我有这个 import UIKit import QuartzCore let rect CGRect CGRectMake 0 0 320 100 var vista UIView init frame
  • 如何在 Clojure 中更新原子的向量元素?

    我有一个矢量原子 我想更新一个本身就是地图的条目 def vector atom atom swap vector atom conj id 1 name myname 我该如何只更新该成员 在可变的 Java 领域的思维方式中 我会做这样