【问题标题】:Ruby: Most idiomatic way to modify an array of hashes?Ruby:修改散列数组的最惯用方法?
【发布时间】:2014-05-05 23:52:59
【问题描述】:

我正在处理一个未排序的哈希数组,其中数组中的哈希顺序并不重要。每个散列都有一个:id 主键,用于在数组中找到它。这个系统的设计不在我的控制范围内。

我必须设计一个读-修改-写系统:

  1. 在数组中查找哈希(通过 :id)。

  2. 对散列中的其他键进行修改。

  3. 将此哈希保存回数组。

现在,做到这一点并让它发挥作用一点也不难。但是 Ruby 的答案是什么?

谢谢!

【问题讨论】:

  • “对散列中的其他键进行修改”是什么意思?
  • 听起来你这里要的数据结构是Hash而不是Array。
  • @Chuck 确实如此。但它说“这个系统的设计超出了我的控制范围。”
  • 通过“其他键”我的意思是我需要通过 :id 找到散列,但修改散列结构中的其他键(除了 :id),保留 :id。这有意义吗?
  • @GregKrsak 我说得通。

标签: ruby-on-rails ruby arrays hash


【解决方案1】:
a = [{id: 1, x: :y}, {id: 2, x: :z}, ...]

查找 id 2:

a.find{|h| h[:id] == 2} # => {:id=>2, :x=>:z}

更改 id 2:x 属性的值:

a.find{|h| h[:id] == 2}[:x] = :w

【讨论】:

    【解决方案2】:

    如果你想改变哈希,你需要做的就是find它:

    h = arr.find { |h| h[:id] == id }
    h[:change_me] = 'changed!'
    

    如果你想替换它,你最好dup它:

    h = arr.delete_if { |h| h[:id] == id }.first.dup
    h[:change_me] = 'changed!'
    arr << h
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2011-02-02
      • 2011-05-01
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      • 2012-09-08
      相关资源
      最近更新 更多