使用Ruby将SQL结果转换为具有ID键的哈希表

3

我有以下数组(SQL结果):

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

What I want is:

{
  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做这件事,最好的方法是什么?是否有任何类似于map的代码片段可以使用?

3个回答

6
Hash[arr.map { |h| [h.delete(:id), h] }]

2

一行 :)

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

clone 是为了不破坏 arr 变量而存在的。


一行?你能用0行完成吗? - odiszapc

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"}}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接