我需要构建一个看起来像这样的哈希数组:
[
{:name=>"company", :value=>"Microsoft"},
{:name=>"type", :value=>"software"},
{:name=>"country", :value=>"US"},
{:name=>"valid", :value=>"yes"}
]
我不是必须继续定义名称和值字段,而是构建了一个如下所示的辅助函数:
def build(attributes=[])
list = []
attributes.each {|k,v| list.push({:name=> "#{k}", :value=> "#{v}"})}
list
end
然后我可以像这样简单地创建我的数组:
attribs = { :company => 'Microsoft', :type => 'software', :country=> 'US', :valid=> 'yes'}
puts build(attribs).inspect
#[{:name=>"company", :value=>"Microsoft"}, {:name=>"type", :value=>"software"}, {:name=>"country", :value=>"US"}, {:name=>"valid", :value=>"yes"}]
对于Ruby来说,这似乎是一种低效且冗长的问题!是否有更清洁或更有效的方法来实现这一结果?
此致
Carlskii
答案 0 :(得分:1)
我认为属性有这些数据:
attributes = [['company','Microsoft'],...]
然后从中构建哈希:
attributes.map { |k,v| {:name => k, :value => v} }
#=> [{:name=>"company", :value=>"Microsoft"},...
答案 1 :(得分:0)
您还可以使用Ruby的Hash.[]方法,该方法接受偶数个参数作为键值对:
Hash['company', 'microsoft','type','software','country','us']
#=> {"company"=>"microsoft", "type"=>"software", "country"=>"us"}
这通常与Ruby的splat运算符一起使用,它允许您将数组作为方法参数传递。
attributes = ['company', 'microsoft','type','software','country','us']
Hash[*attributes]
#=> {"company"=>"microsoft", "type"=>"software", "country"=>"us"}