Ruby使用检测更新值

格雷格·鲁尔

我有一个复杂的数据结构(散列数组的多个级别)。我想查找并更新一个特定值。但是,detect似乎没有将引用传递给我要更新的数据结构中的位置。我可以使用each进行编码each_with_object但是当我想在第一个匹配项中停止时,它将遍历所有数据。在我的实际程序中,"mymouse"485是代表这些值的变量。

哪个单行命令可以更新该条目?为什么在修改数据方面detect不起作用each{}我希望这会起作用,因为Ruby是按引用传递的。

mynew = [{:mouse=>{:cat=>[485, 2, 10, 10, 10, 10, 7], :dog=>[1, 2, 3, 4, 5, 6, 7]}, :name=>"mymouse"}, {:name=>"mymouse", :mouse=>{:cat=>[485, 11, 10], :dog=>[45, 54, 65]}}]

# Finds the value I want to update to 12
puts mynew.detect{|f| f[:name] == "mymouse"}[:mouse][:cat].detect{|x| x==485}

# results in an error
mynew.detect{|f| f[:name] == "mymouse"}[:mouse][:cat].detect{|x| x==485} = 12

# Does not update the value to 12
location = mynew.detect{|f| f[:name] == "mymouse"}[:mouse][:cat].detect{|x| x==485}
location = 12
puts mynew     # Value unchanged
戴维·格雷森

这是一种实现方法:

data = [
  {
    :name=>"mymouse",
    :mouse=>{
      :cat=>[485, 2, 10, 10, 10, 10, 7],
      :dog=>[1, 2, 3, 4, 5, 6, 7]
    },
  },
  {
    :name=>"othermouse",
    :mouse=>{
      :cat=>[485, 11, 10],
      :dog=>[45, 54, 65]
    }
  }
]

entry = data.find { |f| f[:name] == "mymouse" }
array = entry[:mouse][:cat]
modified_array = array.map { |n| n == 485 ? 12 : n }
entry[:mouse][:cat] = modified_array

require 'pp'
pp data

这将起作用;我测试了

另外,一旦有了数组,就可以使用:

array[array.index(485)] = 12

这将修改原始数组,因此其效果可能与我发布的未修改原始数组的主要解决方案不同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用数组值更新 Ruby 哈希值

来自分类Dev

如何使用Ruby验证基于密钥中选定值的更新?

来自分类Dev

使用iPhone检测频率值

来自分类Dev

使用Rxjava检测值变化

来自分类Dev

使用kafka检测值的变化

来自分类Dev

从SQL db中连续检测2个重复值,并进行更新,否则进行插入(使用python)

来自分类Dev

从超级更新Ruby哈希中的单个值

来自分类Dev

使用.update更新值

来自分类Dev

使用 linq 更新值

来自分类Dev

如何使用PyAutoGUI检测RGB值

来自分类Dev

使用indexOf检测值是否包含逗号

来自分类Dev

使用AngularJS检测选择列表值的更改

来自分类Dev

使用ruby访问Javascript值

来自分类Dev

在哈希Ruby的哈希值中访问和更新值

来自分类Dev

使用ruby机械化检测重定向

来自分类Dev

寻找使用Ruby检测生日范围的有效方法

来自分类Dev

使用Ruby检测平台是否响应CLI命令

来自分类Dev

使用ruby机械化检测重定向

来自分类Dev

使用Ruby检测平台是否响应CLI命令

来自分类Dev

使用“ this”更新对象内的值

来自分类Dev

使用lambda更新JSON值

来自分类Dev

使用Java更新值mongo

来自分类Dev

使用xmlstarlet更新XML值

来自分类Dev

使用lambda更新JSON值

来自分类Dev

使用函数更新对象值

来自分类Dev

使用 group by 更新列值

来自分类Dev

使用 Numpy 查找值并更新

来自分类Dev

使用 Javascript 每月更新值

来自分类Dev

Symfony:使用 ajax 更新值