如何从此数组创建哈希?

时间:2014-07-22 20:29:29

标签: ruby

我有一个如下所示的数组:

["value1=3", "value2=4", "value3=5"]

我想最终得到一个哈希:

H['value1'] = 3
H['value2'] = 4
H['value3'] = 5

涉及到一些解析,我希望能指出正确的方向。

2 个答案:

答案 0 :(得分:5)

ary = ["value1=3", "value2=4", "value3=5"]

H = Hash[ary.map {|s| s.split('=') }]

然而,这会将所有值设置为字符串'5'而不是整数。如果你确定它们都是整数:

H = Hash[ary.map {|s| key, value = s.split('='); [key, value.to_i] }]

答案 1 :(得分:1)

我按照@BroiSatse的建议做,但这是使用正则表达式的另一种方式:

ary = ["value1=3", "value2=4", "value3=5"]

ary.join.scan(/([a-z]+\d+)=(\d+)/).map { |k,v| [k,v.to_i] }.to_h
  => {"value1"=>3, "value2"=>4, "value3"=>5}

这里发生了什么:

str = ary.join
  #=> "value1=3value2=4value3=5"
a = str.scan(/([a-z]+\d+)=(\d+)/)
  #=> [["value1", "3"], ["value2", "4"], ["value3", "5"]]
b = a.map { |k,v| [k,v.to_i] }
  #=> [["value1", 3], ["value2", 4], ["value3", 5]]
b.to_h
  #=> {"value1"=>3, "value2"=>4, "value3"=>5}

对于Ruby版本< 2.0,最后一行必须替换为

Hash[b]
  #=> {"value1"=>3, "value2"=>4, "value3"=>5}