3

次の配列があります(SQL結果):

[
  {:id => 1, :field1 => "one", :field2 => "two"},
  {:id => 2, :field1 => "one", :field2 => "two"},
  ...
]

私が欲しいのは:

{
  1 => {:field1 => "one", :field2 => "two"},
  2 => {:field1 => "one", :field2 => "two"},
  ...
}

今、私は次のことが好きです:

data = {}
result.each do |row|
  data[row[:id]] = {:field1 => row[:field1], :field2 => row[:field2]}
end

私は絶対にそれが間違っていると確信しています。Rubyでそれを行う最良の方法は何ですか? マップなどのスニペットはありますか?

4

3 に答える 3

6
Hash[arr.map { |h| [h.delete(:id), h] }]
于 2012-08-06T02:10:23.750 に答える
2

1行:)

hash = arr.clone.each_with_object({}) { |e,res| res[e.delete(:id)] = e }

clonearr変数を破壊しないためのものです

于 2012-08-05T23:59:49.057 に答える
1

もしかして、こういうこと?

arr = [
  {:id => 1, :field1 => "one", :field2 => "two"},
  {:id => 2, :field1 => "one", :field2 => "two"}
]

hash = arr.each_with_object({}) do |el, memo|
  id = el.delete(:id)
  memo[id] = el
end

hash # => {1=>{:field1=>"one", :field2=>"two"}, 2=>{:field1=>"one", :field2=>"two"}}
于 2012-08-05T23:45:08.050 に答える