将多个数组转换为单个哈希

时间:2013-11-15 02:15:36

标签: ruby parsing hashmap

我正在研究配置文件解析器,我需要帮助将key:value对解析为散列。

我的数据形式为:key: value key2: value2 another_key: another_value

到目前为止,我的代码是

    line = line.strip!.split(':\s+')

的形式返回一个数组
["key:value"]["key2: value2"]["another_key: another_value"]

如何以

的形式将这些数组转换为单个哈希
{key=>value, key2=>value2, another_key=>another_value}

我不确定key:value对是否需要以字符串的形式出现。无论什么都是最容易合作的。

感谢您的帮助!


这是我找到的解决方案:

    line = line.strip.split(':')
    hash = Hash[*line]

导致输出{"key"=>"value"}, {"key2"=>"value2"}

3 个答案:

答案 0 :(得分:1)

更简单:

Hash[*line.gsub(':',' ').split]
  # => {"key"=>"value", "key2"=>"value2", "another_key"=>"another_value"} 

答案 1 :(得分:1)

假设键和值是单个单词,我可能会这样做:

Hash[line.scan(/(\w+):\s?(\w+)/)]

如果它不是您想要的那样,您可以更改正则表达式。

答案 2 :(得分:1)

非常接近Cary的解决方案:

Hash[*line.delete(':').split]