1

我想从数据库中的行数组构建散列。我可以使用下面的代码轻松完成。我从 PHP 来到 Ruby,这就是我的做法。在Ruby(或Rails)中是否有更好/正确的方法来做到这一点?

def features_hash
  features_hash = {}
  product_features.each do |feature|
    features_hash[feature.feature_id] = feature.value
  end

  features_hash
end

# {1 => 'Blue', 2 => 'Medium', 3 => 'Metal'}
4

3 回答 3

5

您可以使用Hash[]

Hash[ product_features.map{|f| [f.feature_id, f.value]}  ]

你想要这个更好吗?

product_features.map{|f| [f.feature_id, f.value]}.to_h # no available (yet?)

然后去看看这个功能请求并评论它!

替代解决方案:

product_features.each_with_object({}){|f, h| h[f.feature_id] = f.value}

还有group_byindex_bywhich 可能会有所帮助,但价值将是特征本身,而不是它们的value.

于 2013-01-23T19:43:37.727 回答
3

您可以index_by为此使用:

product_features.index_by(&:id)

这产生的结果与手动构建哈希id作为键和记录作为值的结果相同。

于 2013-01-23T19:43:41.597 回答
1

你的代码是一个很好的方法。另一种方法是:

def features_hash
  product_features.inject({}) do |features_hash, feature|
    features_hash[feature.feature_id] = feature.value
    features_hash
  end
end
于 2013-01-23T19:43:10.257 回答