请对此我需要帮助。
在Ruby中,如果我有此数组数组
array = [["a: 1", "b:2"],["a: 3", "b:4"]]
如何获得红宝石中的此哈希数组
aoh = [{:a => "1", :b => "2"},{:a => "3", :b => "4"}]
遍历您的项目,遍历其项目,创建一个新数组:
array.map do |items|
items.map do |item|
k,v = item.split(":", 2)
{ k.to_sym => v }
}
}
请注意,我们正在使用map
而不是each
,它将返回一个数组。
注意,like pointed out in the comments,这很可能是XY问题,而不是转换数组,更好的选择是以更好的方式构建起始数组。
不过,您可以通过以下方式进行此操作:
aoh = array.map { |array| array.to_h { |string| string.split(':').map(&:strip) } }
# => [{"a"=>"1", "b"=>"2"}, {"a"=>"3", "b"=>"4"}]
以上将为您提供字符串密钥,这是更安全的选择。您可以将它们转换为符号,但是它们只能用于可信标识符。当数据来自用户或外部来源时,我会选择上面的方法。
可以通过添加以下行来转换为符号:
aoh.each { |hash| hash.transform_keys!(&:to_sym) }
#=> [{:a=>"1", :b=>"2"}, {:a=>"3", :b=>"4"}]