2013-07-07 181 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"}]