数组中键的字符串插值?

时间:2013-08-30 14:50:14

标签: ruby

我应该这样做:

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”的空数组,用候选+得分哈希填充它,最后返回数组分数,是否有某种语法糖或者对此有所帮助?

2 个答案:

答案 0 :(得分:2)

以下是合并的方式,以及创建scores的更简洁方法:

scores = candidates.map do |candidate|
  candidate.merge({attribute_name => stuff})
end

这使用Hash#mergeArray#map(假设candidatesArray)。

Ruby有一个语法糖,如果你在它们之间用Hash成对编写它们,就会为=>包装方法参数。所以第二行也可以是这样的:

  candidate.merge(attribute_name => stuff)

另外,如果attribute_nameStringcandidate中的其他键都是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