gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 08:42:48 26 4
gpt4 key购买 nike

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

到目前为止我已经得到了这段代码,但是在具有大量数据的真实应用程序中,这成为应用程序中最慢的部分,它可能会泄漏内存,因为当我在每个 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 }

你总是可以扩展 block 来处理其他情况:

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"

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

关于ruby - 查找并替换特定的哈希值及其在数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51286550/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com