2013-07-07 140 views
1

无法在任何地方找到此特定实例;我可能会错过一些简单的东西,但这里就是这样。将数组转换为哈希数组

说我有一个数组:

["Field1", "Field2"] 

我需要将其转换成散列的数组,这样(的的FieldType键/值是默认值)

[{"Name"=>"Field1", "FieldType"=>"Text"}, 
{"Name"=>"Field2", "FieldType"=>"Text"}] 

会如何我去做这个?下面清楚地不工作:

fields.each do |field| 
    fieldResults << {"Name" => field, "FieldType" => "Text"} 
end 

回答

8

假设fieldResults是一个数组,你写的东西应该工作,但它更习惯使用一个更适合的功能,如map

fields.map {|field| { 'Name' => field, 'FieldType' => 'Text' }} 
+0

地图工作,无论出于何种原因,我无法让我的代码(上)工作。谢谢! – user2467225

0

你可以采取下面的方法太:

fields = ["Field1", "Field2"] 
result = fields.map{|i| {"Name" => i}.update({"FieldType" => "Text"})} 
# => [{"Name"=>"Field1", "FieldType"=>"Text"}, 
#  {"Name"=>"Field2", "FieldType"=>"Text"}] 
1

如果fields = ["Field1", "Field2"]fieldResults被初始化为[]您的代码应工作。但正如查克所说,fieldResults = fields.map {|field| { 'Name' => field, 'FieldType' => 'Text' }}更具有意识形态。

顺便说一句:符号,方法和变量的Ruby命名约定是使用snake_case(下划线)而不是camelCase来处理多个单词名称。像field_results而不是fieldResults

0

这样做的另一种方法。

fieldResults = [] 
["Field1", "Field2"].each{|e| fieldResults << Hash["Name",e,"FieldType","Text"]} 
1.9.3 (main):0 > fieldResults 
=> [{"Name"=>"Field1", "FieldType"=>"Text"}, 
    {"Name"=>"Field2", "FieldType"=>"Text"}]