将Array转换为Hashes数组

时间:2013-07-07 18:05:10

标签: ruby arrays

无法在任何地方找到此特定实例;我可能会遗漏一些简单的东西,但在这里。

说我有一个数组:

["Field1", "Field2"]

我需要将其转换为哈希数组,因此(FieldType键/值是默认值)

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

我该怎么做呢?以下显然不起作用:

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

4 个答案:

答案 0 :(得分:8)

假设fieldResults是一个数组,你写的内容应该有效,尽管使用更合适的函数更加惯用,比如map

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

答案 1 :(得分:1)

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

顺便说一下:符号,方法和变量的ruby命名约定是使用snake_case(下划线)而不是camelCase用于多个单词名称。与field_results代替fieldResults

一样

答案 2 :(得分:0)

你也可以采取以下方法:

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

答案 3 :(得分: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"}]