我有一个如下所示的数组:
["value1=3", "value2=4", "value3=5"]
我想最终得到一个哈希:
H['value1'] = 3
H['value2'] = 4
H['value3'] = 5
涉及到一些解析,我希望能指出正确的方向。
答案 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}