将散列中的一个匹配值替换为另一个

时间:2013-04-18 07:51:11

标签: ruby arrays hash

我有一系列哈希:

arr = [
  {:key1=>"one", :key2=>"two", :key3=>"three"},
  {:key1=>"four", :key2=>"five", :key3=>"six"},
  {:key1=>"seven", :key2=>"eight", :key3=>"nine"}
]

如果:key1 = "replaced",我想搜索并将:key的值替换为"one"

结果数组将显示为:

arr = [
  {:key1=>"replaced", ;key2=>"two", :key3=>"three"},
  {:key1=>"four", ;key2=>"five", :key3=>"six"},
  {:key1=>"seven", ;key2=>"eight", :key3=>"nine"}
]

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

尝试使用以下代码来查看它是否解决了您的问题

arr.each { |item| item[:key1] = "replaced" if item[:key1] == "one" }

答案 1 :(得分:0)

arr = [
  {:key1=>"one", :key2=>"two", :key3=>"three"},
  {:key1=>"four", :key2=>"five", :key3=>"six"},
  {:key1=>"seven", :key2=>"eight", :key3=>"nine"}
]

p arr.each {|x| x[:key1] = "replaced" if x.assoc(:key1).include? "one"}

p arr.each {|x| x[:key1] = "replaced" if x.values_at(:key1) == "one"}

输出:

[{:key1=>"replaced", :key2=>"two", :key3=>"three"}, {:key1=>"four", :key2=>"five", :key3=>"six"}, {:key1=>"seven", :key2=>"eight", :key3=>"nine"}]