Ruby将数组数组转换为哈希数组

问题描述 投票:-1回答:2

请对此我需要帮助。

在Ruby中,如果我有此数组数组

array = [["a: 1", "b:2"],["a: 3", "b:4"]]

如何获得红宝石中的此哈希数组

aoh = [{:a => "1", :b => "2"},{:a => "3", :b => "4"}]
arrays ruby hash
2个回答
0
投票

遍历您的项目,遍历其项目,创建一个新数组:

array.map do |items| 
  items.map do |item| 
    k,v = item.split(":", 2)
    { k.to_sym => v } 
  } 
} 

请注意,我们正在使用map而不是each,它将返回一个数组。


0
投票

注意,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"}]
© www.soinside.com 2019 - 2024. All rights reserved.