查找并替换数组中的特定哈希及其值

2023-12-03

在数组中查找特定哈希并就地替换其值的最有效方法是什么,以便数组也发生更改?

到目前为止,我已经得到了这段代码,但在具有大量数据的实际应用程序中,这成为应用程序中最慢的部分,这可能会泄漏内存,因为当我对每个 websocket 消息执行此操作时,无界内存会不断增长。

array = 
  [ 
    { id: 1,
      parameters: {
        omg: "lol"
     },
     options: {
         lol: "omg"
      }
    },
    { id: 2,
      parameters: {
        omg: "double lol"
      },
      options: {
        lol: "double omg"
      }
    }
  ]

selection = array.select { |a| a[:id] == 1 }[0]
selection[:parameters][:omg] = "triple omg"
p array
# => [{:id=>1, :parameters=>{:omg=>"triple omg"}, :options=>{:lol=>"omg"}}, {:id=>2, :parameters=>{:omg=>"double lol"}, :options=>{:lol=>"double omg"}}]

这将执行您仅循环记录一次之后的操作:

array.each { |hash| hash[:parameters][:omg] = "triple omg" if hash[:id] == 1 }

您始终可以扩展该块来处理其他情况:

array.each do |hash| 
  hash[:parameters][:omg] = "triple omg" if hash[:id] == 1
  hash[:parameters][:omg] = "quadruple omg" if hash[:id] == 2
  # etc
end

并且它只会对元素进行一次迭代。

您也可能更适合将数据调整为单个散列。一般来说,搜索哈希会比使用数组更快,特别是如果您有如此处的唯一标识符。就像是:

{ 
  1 => {
    parameters: {
      omg: "lol"
    },
    options: {
      lol: "omg"
    }
  },
  2 => {
    parameters: {
      omg: "double lol"
    },
    options: {
      lol: "double omg"
    }
  } 
}

这样,您只需调用以下内容即可实现您所追求的目标:

hash[1][:parameters][:omg] = "triple omg"

希望这会有所帮助 - 如果您有任何疑问,请告诉我您的进展情况。

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

查找并替换数组中的特定哈希及其值 的相关文章

随机推荐

  • WebDriver 无法使用 Java 通过 xpath 找到元素

    以下是使用 Java 的 WebDriver 代码片段 WebDriver driver new FirefoxDriver driver get http www google pl driver manage timeouts impl
  • 在每个组的分类 x 轴内叠加 geom_line - ggplot2

    I want to make a plot like this 这些方框代表连续变量在组内的分布 红色圆圈是显示所有实际观察结果的点 到目前为止 一切都很好 这很简单geom boxplot geom point具有群体审美 这里有两个曲折
  • 在 DI 注入容器中注册受约束的 MediatR 管道行为

    我有以下 MediatR 行为 public class FailFastRequestBehavior
  • matlab按字符数分割字符串

    Matlab 中是否有任何内置函数可以按字符数切割字符串并将其作为元胞数组或其他内容返回 例如 如果调用 A some function string 3 Input string 1234567890 Output A 123 456 7
  • 如何提交通过引导弹出窗口加载的表单

    我如何使用 jquery 提交表单 我的表单已加载到引导弹出窗口上 我尝试了下面的 jquery 代码 但它没有提交表单 前任 我必须提交以下带有 id 161subproj 的表单 那么如何在加载到 popover 后提交此表单 希望我的
  • 容器固定宽度。中心 div 动态宽度。想要左右 div 均匀地填充剩余宽度

    有三列 所有三列的组合宽度是固定的 第二列 中心 将具有动态内容 我需要左右列来相等地填充剩余空间 容器宽度 中心列动态宽度 例子 http jsfiddle net htKje div class container div class
  • “unsigned int”打印为负数?

    我取一个整数 在本例中为 192 并将其左移 24 个空格 看起来 前导 1 导致它变成负数 unsigned int i 192 unsigned int newnumber i lt lt 24 NSLog newnumber is d
  • SIMD和动态内存分配[重复]

    这个问题在这里已经有答案了 可能的重复 SSE 内在函数和对齐 我是 SIMD 编程新手 所以如果我问一个明显的问题 请原谅 我进行了一些尝试 最后发现我想在动态分配的结构中存储 SIMD 值 这是代码 struct SimdTest m1
  • 此 SqlParameterCollection 不包含 ParameterName 为“@UserId”的 SqlParameter

    我有一个登录页面 用户成功登录后 他们可以查看和管理他们的个人资料 信息 这可以通过从数据库检索数据并显示在表单视图上来完成 但是 我的 userprofile aspx cs 文件中出现以下错误 Exception Details Sys
  • 如何使用 PHP 获取服务器上运行的 PHP 进程列表

    我有一个运行 PHP 文件的 cronjob 该文件运行用 PHP 编写的 DAEMON 但我只想在没有其他实例正在运行的情况下运行 DAEMON 如何获取正在运行的 PHP 进程列表 以便查找我的守护进程正在运行 我想到了某种 exec
  • 没有 Spring Cloud 配置服务器的 RefreshScope 运行时配置

    是否可以使用 RefreshScope 通过 POST Rest api refresh 调用来刷新属性 api url 而无需设置 Spring Cloud 配置服务器和 Spring Cloud 配置客户端设置 例如 Consumer
  • Ruby 方法拦截

    我想拦截 ruby 类上的方法调用 并能够在方法实际执行之前和之后执行某些操作 我尝试了以下代码 但出现错误 MethodInterception rb 16 inbefore filter eval 2 inalias method 未定
  • dbml 文件 - 创建数据库

    我正在尝试使用创建数据库BA dbml文件 Linq 到 Sql 我知道我必须创造DataContext并创建数据库 但我不知道该怎么做 我必须创建吗DataContext in the BA cs file 这可能是多余的帖子 对此我深表
  • 如何更改 iphone sdk xcode 中的 uiimage 颜色

    我正在使用不同的图像 我想包括更改颜色选项 但我不能 有身体帮助我吗 如果你想做图像着色 请参见 UIImage Tint m 中kballard MGImageUtilities 如果您想要批量颜色替换 例如 将图像视为剪影并将整个颜色更
  • 如何比较从 url 到 NSutf8stringencoding 的字符串返回 1 或 0 与普通字符串 @"1"

    我需要使用比较 url 中的字符串NSutf8stringencoding以便返回 1 或 0 但即使字符串值为 1 它也始终返回 0 NSString strURL NSString stringWithFormat http local
  • 使用自定义表情符号创建软键盘

    我的任务是创建一个新的 android3rd party keyboard支持来自资产的自定义表情符号 我自己的图标 我想用我自己的表情符号图标实现一个软键盘不使用 Unicode 或我的自定义 Unicode 问题 如果我创建一个自定义表
  • PHPUnit + Selenium:如何设置 Firefox about:config 选项?

    使用 PHPUnit 和 Firefox 远程运行 Selenium 测试时 onChange 事件不会像用户操作浏览器时那样被触发 解决这个问题的方法似乎是设置focusmanager testmode选项true在 Firefox 的偏
  • 回发期间 GridView.DataSource 为空

    我想从我的应用程序中的每个 Gridview 实现打印 下载 csv 那些通过数据源或直接通过 gvSample DataSource Data gvSample DataBind 现在我的第一个方法是在页脚模板中设置一个下载按钮并在那里处
  • 从 .m matlab 文件中声明的矩阵创建 numpy 数组

    一位同事留下了一些我想用 Numpy 分析的数据文件 每个文件都是一个 matlab 文件 例如data m 并具有以下格式 但有更多的列和行 values 24 92 23 66 22 55 24 77 23 56 22 45 24 54
  • 查找并替换数组中的特定哈希及其值

    在数组中查找特定哈希并就地替换其值的最有效方法是什么 以便数组也发生更改 到目前为止 我已经得到了这段代码 但在具有大量数据的实际应用程序中 这成为应用程序中最慢的部分 这可能会泄漏内存 因为当我对每个 websocket 消息执行此操作时