3
A
回答
5
另一种方法,使用发现
1.9.3p194 :007 > array1 = [{"name"=>"Bob"}, {"age"=>"30"}]
=> [{"name"=>"Bob"}, {"age"=>"30"}]
1.9.3p194 :008 > hash1 = array1.find { |h| h['age'] == "30" }
=> {"age"=>"30"}
1.9.3p194 :009 > hash1['age'] = 31
=> 31
1.9.3p194 :010 > array1
=> [{"name"=>"Bob"}, {"age"=>31}]
2
既然你真的有是哈希的数组,你可以索引数组,以获得第二哈希值,然后通过传递"age"
作为关键更新值:
1.9.3p194 :001 > h = [{"name"=>"Bob"}, {"age"=>"30"}]
=> [{"name"=>"Bob"}, {"age"=>"30"}]
1.9.3p194 :002 > h[1]["age"] = 31
=> 31
1.9.3p194 :003 > h
=> [{"name"=>"Bob"}, {"age"=>31}]
1
这样做:
[{"name"=>"Bob"}, {"age"=>"30"}][1]["age"] = 31
3
为什么不将数组转换成更简单,更灵活的数组?你的阵列是哭出来的是一个值对象:
class Person
attr_accessor :name, :age
def initialize arr
arr.each { |h| h.each { |k,v| instance_variable_set("@#{k}", v) } }
end
def to_hash_array
instance_variables.each_with_object([]) do |iv, arr|
arr << {iv.to_s.sub('@','') => instance_variable_get(iv)}
end
end
end
def hash_array_to_person arr
person = Person.new
arr.each { |h| h.each { |k,v| person.send("#{k}=", v) } }
person
end
example = [{"name"=>"Bob"}, {"age"=>"30"}]
bob = Person.new(example)
p bob
p bob.to_hash_array
bob.age = 31
p bob.to_hash_array
输出:
#<Person:0x00000000fe8418 @name="Bob", @age="30">
[{"name"=>"Bob"}, {"age"=>"30"}]
[{"name"=>"Bob"}, {"age"=>31}]
Ruby是不是C,你有这么比基本的原始数据类型,更提供给您。
相关问题
- 1. 红宝石变换散列
- 2. 红宝石散列组合
- 3. 红宝石和厨师:解决并替换散列中的值
- 4. 无法更改/替换红宝石中的全局散列值
- 5. 红宝石散列,group_by值
- 6. 询问散列的红宝石数组
- 7. 红宝石数组,散列,整数
- 8. 红宝石散列在红宝石
- 9. 散列散列的红宝石散列
- 10. 红宝石字数组作为散列?
- 11. 在散列中转义红宝石值
- 12. 替换红宝石
- 13. 红宝石散列值到数组数组
- 14. 红宝石 - 一个数组的改变散列值值
- 15. 用红宝石散列中的“\\ n”自动替换“\ n”
- 16. 用红宝石中的新字符串替换散列键
- 17. 红宝石代替数组列表
- 18. 转换JSON - >红宝石哈希散列的数组
- 19. 将红宝石数组转换成带符号的散列
- 20. 红宝石CSV.readline转换成散列
- 21. 红宝石字符串散列转换
- 22. 散列中的哈希修改问题,替换红宝石中的值
- 23. 在红宝石中将散列数组转换为单个散列
- 24. 红宝石散列组和量
- 25. 红宝石 - 从散列
- 26. 反向散列红宝石
- 27. 移从红宝石散列
- 28. 排序散列红宝石
- 29. 操纵散列红宝石
- 30. 数组的红宝石散列,检索值