我应该这样做:
attribute_name = "key_i_want"
scores = []
candidates.each do |candidate|
scores.push candidate.attributes.merge(:{#attribute_name} => {stuff})
end
scores
我想要发生的是,类别名称(在这种情况下具有键“key_i_want”)被添加到散列中,其值将是“stuff”。是否有某种“插值字符串”功能,我可以在其中添加哈希k-v对现有的哈希值。
另一件事,在这个函数中发生的事情是我有一个名为“score”的空数组,用候选+得分哈希填充它,最后返回数组分数,是否有某种语法糖或者对此有所帮助?
答案 0 :(得分:2)
以下是合并的方式,以及创建scores
的更简洁方法:
scores = candidates.map do |candidate|
candidate.merge({attribute_name => stuff})
end
这使用Hash#merge
和Array#map
(假设candidates
是Array
)。
Ruby有一个语法糖,如果你在它们之间用Hash
成对编写它们,就会为=>
包装方法参数。所以第二行也可以是这样的:
candidate.merge(attribute_name => stuff)
另外,如果attribute_name
是String
但candidate
中的其他键都是Symbol
s,请使用String#to_sym
以便生成Hash
candidate.merge({attribute_name_string.to_sym => stuff})
1}}将具有一致的键:
{{1}}
答案 1 :(得分:0)
是否存在某种“插值字符串”功能,我可以将哈希k-v对添加到现有哈希值。
无需插值。
这样做: -
merge(attribute_name => stuff)
另一件事,在这个函数中发生的事情是我有一个名为“score”的空数组,用候选+得分哈希填充它,并在最后返回数组分数,是否有某种语法糖还是什么呢?
attribute_name = "key_i_want"
candidates.each_with_object([]) do |candidate,scores|
scores.push candidate.attributes.merge(attribute_name => stuff)
end