Elixir:更新地图列表中的特定值

2024-01-08

给出以下地图列表:

ball_prop_list = 
[
  %{"id" => "cue", "is_idle" => true, "velocity_x" => 0.0, "velocity_z" => 0.0, "x" => -15.0, "z" => 0.0},
  %{"id" => "ball_1", "is_idle" => true, "velocity_x" => 0.0, "velocity_z" => 0.0, "x" => 15.0, "z" => 0.0},
  %{"id" => "ball_2", "is_idle" => true, "velocity_x" => 0.0, "velocity_z" => 0.0, "x" => 17.0, "z" => 1.1},
  %{"id" => "ball_3", "is_idle" => true, "velocity_x" => 0.0, "velocity_z" => 0.0, "x" => 17.0, "z" => -1.1}
]

我该如何改变,比如说,只是velocity_x and velocity_y of "id" => "cue",并保持其他一切不变?

我只尝试使用更新的值创建一个新列表(这不一定是我的目标),如下所示:

new_prop_list = Enum.map(balls_json_list, fn(val) -> 
  if val["id"] == "cue" do
    Map.put(val, "velocity_x" velocity_vector[:x])
    Map.put(val, "velocity_z" velocity_vector[:z])
  end
end)

但这并没有成功,可能是因为我的地图不使用原子键 - 到目前为止我看到的所有其他示例都使用原子键,或者添加新的键和值等。

还有什么我可以尝试的吗?


有被极度低估的Access https://hexdocs.pm/elixir/Access.html in elixir /questions/tagged/elixir这更加强大,尤其是在深度更新方面。

即使在这种特殊情况下,尽管简单Map.put/3可能看起来更容易,我会发布解决方案update_in/3 https://hexdocs.pm/elixir/Kernel.html#update_in/3 using Access。请注意,它可能用于修改深度嵌套结构any水平,不同于Map.put.

update_in(
  ball_prop_list,
  [Access.filter(&match?(%{"id" => "cue"}, &1))],
  &Map.merge(&1, %{"velocity_x" => :new_velocity})
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Elixir:更新地图列表中的特定值 的相关文章

随机推荐

  • Mvvm交叉绑定

    我尝试将小部件绑定到视图模型属性 但出现异常 MvxBind Warning 14 76 Failed to create target binding for binding Signature for Order ClientSigna
  • 创建 WCF 消息的缓冲副本

    我在消息检查器中有以下代码来检查响应正文 我知道 WCF 消息只能读取一次 因此我首先创建一个副本 但使用以下代码我仍然收到错误 此消息无法支持该操作 因为它已被读取 我错过了什么吗 MessageBuffer buffer message
  • Firefox 扩展自定义字体

    我正在使用 Firefox Add on SDK 创建扩展并执行 PageMod 这段代码位于main js exports main function var pageMod require sdk page mod pageMod Pa
  • django-allauth:模块“accounts.forms”未定义“SignupForm”类

    我收到以下错误 django core exceptions ImproperlyConfigured 模块 accounts forms 没有定义 SignupForm 类 设置 py ACCOUNT SIGNUP FORM CLASS
  • 动态设置错误动作的布局文件

    我知道有不同的方法来选择布局文件 可以办到 在配置中 with Yii app gt layout with Controller layout 我有一些使用不同布局文件的控制器 如下所示 class FirstController ext
  • 我应该模拟与我的测试对象交互的所有对象吗?

    我正在努力知道如何决定应该模拟与我的测试对象交互的哪些对象 class MyClass private Customer customer private Invoice invoice private PrintService ps pr
  • 在 .NET 中初始化空变量

    在 NET 中初始化 null 变量的正确方法是什么 我的一位同事告诉我 将变量硬定义为 null 会降低速度 int var1 good practice string s1 good practice int var2 0 bad pr
  • 如何使用 Java HttpServer/HttpExchange 获取 GET 中的查询字符串?

    我正在尝试用 Java 创建一个简单的 HttpServer 来处理 GET 请求 但是当我尝试获取请求的 GET 参数时 我注意到 HttpExchange 类没有相应的方法 有人知道读取 GET 参数 查询字符串 的简单方法吗 这就是我
  • NgStyle 返回:ERROR 错误:找不到不同的支持对象 '{"background-color":"blue"}'

    在我的模板中使用这个 span HELLO span 在我的组件中 myStyle string return background color blue 我越来越 ERROR Error Cannot find a differ supp
  • css 过渡不透明度淡入淡出背景

    我正在做一个transition当用户将鼠标悬停在图像上时 它会淡入透明白色 我的问题是我需要将颜色更改为黑色 我尝试过简单地添加background black 到包含的类transition 但不幸的是它不起作用 它仍然褪成白色透明 我
  • 是否可以继承 C++11 智能指针并覆盖相关运算符?

    根据cppreference com http en cppreference com w cpp memory shared ptr std shared ptr提供了一整套相对运算符 出于某些目的 我更希望使用相对运算符来根据比较引用的
  • 如何从html图像标签获取class和src

    我想检索课程并src使用正则表达式的图像标签 的位置class and src可以在任何地方 我能够得到src from
  • Jasmine angularjs - 监视控制器初始化时调用的方法

    我目前正在使用 Jasmine 与 Karma Testaulous 和 Web Storm 来编写单元测试 我在监视控制器初始化时立即调用的方法时遇到问题 是否可以监视控制器初始化时调用的方法 我的控制器代码 我试图监视的方法是getSe
  • 按下按钮后如何提示用户授予推送通知权限?

    I read 如何控制何时在 iOS 中提示用户推送通知权限 https stackoverflow com questions 30817069 how to control when to prompt user for push no
  • STL 容器 - 矢量、列表和双端队列之间的区别

    如果我想将元素也推入容器的开头 我应该使用双端队列而不是向量吗 我什么时候应该使用列表以及它的意义是什么 Use deque如果您需要在序列的开头和结尾以及随机访问时进行高效的插入 删除 使用list如果您需要在任何地方进行高效插入 而牺牲
  • 如何通过puppeteer获取嵌入页面的pdf?

    我正在尝试获取一个页面的 pdf 副本 其结构如下 我尝试用page pdf但我得到了一个空白的pdf 中间写着 无法加载插件 对于其他偶然发现这个问题的人来说
  • 如何更改 IPython %pdb 和 %debug 调试器?

    默认情况下 ipython 使用 ipdb 作为带有 pdb 或 debug 魔法的调试器 但是 我更喜欢 pdb 有没有办法更改用这些魔法调用的调试器 我知道我可以简单地在 pdb 的异常情况下使用 pdb xpm 但我想让它与 ipyt
  • 如何在Rstudio中运行python脚本

    我对如何从 Rstudio 运行 python 脚本有疑问 我最初的想法是从 GitHub 存储库获取 python 脚本 然后在 R 中运行它 我通过使用获取了 python 代码script lt getURL URL ssl veri
  • android - 启动屏幕上的进度条

    我的应用程序在加载时显示启动屏幕 我想在启动屏幕上的图标下方放置一个动画进度条 我尝试使用 XML 但它崩溃了 说无效标签进度条 这是我在 styles xml 中调用启动屏幕的代码 这是我的background splash xml 文件
  • Elixir:更新地图列表中的特定值

    给出以下地图列表 ball prop list id gt cue is idle gt true velocity x gt 0 0 velocity z gt 0 0 x gt 15 0 z gt 0 0 id gt ball 1 is