Ruby重构数据

时间:2013-03-17 11:17:05

标签: ruby arrays

我需要构建一个看起来像这样的哈希数组:

[
{: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

2 个答案:

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