我有一个这样的散列:
a = {"note_id"=>[nil, 1], "comment_id"=>[nil, 4]}
a = {"note_id"=>[1, 3], "comment_id"=>[4, 5]}
a = {"note_id"=>[3, nil], "comment_id"=>[5, nil]}
我想将note_id的值从[nil,1]更改为[nil,8],或者将[1,3]更改为[8,7],类似地,也可以使用comment_id。
如果值为nil,那么我不想更新那个地方的任何东西。
为此,我是这样做的:
if a.include? 'note_id' || 'comment_id'
a[:note_id].each do |k|
k = object.method1
end
a[:comment_id].each do |k|
k = object.method2
end
end
但是note_id和comment_id值保持不变。
有人能帮我一下吗。
2条答案
按热度按时间yh2wf1be1#
有两件事出了问题:
1.在
Hash
中有字符串键,以后在a[:note_id]
中将它们作为符号引用。if a.include? 'note_id' || 'comment_id'
实际上是if a.include? 'note_id'
1.当用
each
枚举Array
时,你失去了对数组中位置的引用,你只得到存储在变量k
中的元素。因此k=
只修改该作用域中的变量。但是,如果您修改a["note_id"]
的元素,它会将更改反映到a
中,因为通过调用a["note_id"]
,您将获得对相同的存储在Hash
中的Array
对象编辑:解决了
a.include?
条件的问题;已更新代码,使其不更新nil
值slsn1g292#
你可以试试这个:-