2

可能重复:
将两个数组组合成哈希

我有一个模型,它将键值对存储为另一个模型人的属性。

将 person.person_attributes 转换为哈希的简单方法是什么?

这是我想出的一个愚蠢的方法:

keys = person.person_attributes.map(&:key)
values = person.person_attributes.map(&:value)

hashed_attributes = Hash.new

keys.each_index do |i|
  hashes_attribues[keys[i]] = values[i]
end

有什么更优雅的方法来做到这一点?

先感谢您,

4

2 回答 2

4

我喜欢Enumerable#each_with_object这些东西

attributes = person.person_attributes.each_with_object({}) do |attribute, hash|
  hash[attribute.key] = attribute.value
end

如果你还在使用 Ruby 1.8.7,不用担心,Rails 已经向后移植了这个方法

于 2012-10-04T22:13:22.810 回答
2

您想将一个对象数组(每个对象都有一个keyvalue属性)转换为一个哈希,其中key映射到value?

您可以使用以下内容,用于Hash[array]将二维数组转换为哈希:

Hash[person.person_attributes.map { |e| [e.key, e.value] }]

输入:

Obj = Struct.new(:key, :value)

[ { Obj.new(:key1, :value1) },
  { Obj.new(:key2, :value2) },
  { Obj.new(:key3, :value3) }
]

输出:

{ :key1 => :value1, :key2 => :value2, :key3 => :value3 }
于 2012-10-04T22:02:48.023 回答