【问题标题】:Converting multiple arrays into a single hash将多个数组转换为单个哈希
【发布时间】:2013-11-15 02:15:35
【问题描述】:

我正在使用配置文件解析器,我需要帮助将 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}

我不确定键:值对是否需要采用字符串的形式。最容易使用的。

感谢您的帮助!


这是我找到的解决方案:

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

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

【问题讨论】:

  • 看看String#partition。这非常适合将每个字符串拆分为键和值,或者在冒号的每一侧使用带有捕获组的正则表达式。
  • 很好,String#partition 是一个有用的方法!谢谢@CarySwoveland

标签: ruby parsing hashmap


【解决方案1】:

非常接近卡里的解决方案:

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

【讨论】:

  • 这就是为什么我仍然觉得它值得添加。
  • 啊,诚实的代价。 :-)
【解决方案2】:

更简单:

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

【讨论】:

  • 很好的解决方案,我用它想出了我自己的东西
【解决方案3】:

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

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

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

【讨论】:

  • 感谢@Nigel 这行得通,但我宁愿不处理正则表达式
猜你喜欢
  • 2017-07-06
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
  • 2019-05-23
相关资源
最近更新 更多