1

DB の行の配列からハッシュを作成したいと考えています。以下のコードで簡単に実行できます。私は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_byありindex_byますが、値は機能自体であり、機能ではありません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 に答える