0

我应该这样做:

attribute_name = "key_i_want"
scores = []

candidates.each do |candidate|
    scores.push candidate.attributes.merge(:{#attribute_name} => {stuff})
end

scores

我想要发生的是类别名称(在这种情况下具有键“key_i_want”)被添加到哈希中,其值将是“stuff”。是否有某种“插入字符串”功能,我可以在其中将散列 kv 对添加到现有散列中。

另一件事,在这个函数中发生的事情是我有一个名为“scores”的空数组,用候选+分数散列填充它,并在最后返回数组分数,是否有某种语法糖或其他东西?

4

2 回答 2

2

这是合并的方式,以及更简洁的创建方式scores

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

这使用Hash#mergeArray#map(假设candidates是一个Array)。

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

  candidate.merge(attribute_name => stuff)

此外,如果attribute_name是 aString但其余的键candidateSymbols,请使用String#to_sym以使结果Hash具有一致的键:

  candidate.merge({attribute_name_string.to_sym => stuff})
于 2013-08-30T14:59:01.500 回答
0

是否有某种“插入字符串”功能,我可以在其中将散列 kv 对添加到现有散列中。

不需要插值

做这个:-

  merge(attribute_name => stuff)

另一件事,在这个函数中发生的事情是我有一个名为“scores”的空数组,用候选+分数散列填充它,并在最后返回数组分数,是否有某种语法糖或其他东西?

attribute_name = "key_i_want"
candidates.each_with_object([]) do |candidate,scores|
    scores.push candidate.attributes.merge(attribute_name => stuff)
end
于 2013-08-30T14:52:46.660 回答