我有这个表达式“1 = 2,3 =(4 = 5,6 = 7)”,我想从中创建一个哈希 - 1 => 2, 3 =>(4 = 5,6 = 7)。我可以在 2 遍中做到这一点。在第一遍中,我可以将 (.*) 转换为 (4;5,6;7) 之类的东西,然后在第二遍中进行一些拆分。
有更好的解决方案吗?
我有这个表达式“1 = 2,3 =(4 = 5,6 = 7)”,我想从中创建一个哈希 - 1 => 2, 3 =>(4 = 5,6 = 7)。我可以在 2 遍中做到这一点。在第一遍中,我可以将 (.*) 转换为 (4;5,6;7) 之类的东西,然后在第二遍中进行一些拆分。
有更好的解决方案吗?
只要您不需要担心嵌套括号,并且括号内的任何内容都将被视为纯字符串:
str = "1=2,3=(4=5,6=7)"
Hash[str.scan(/([^=,]+)=(\([^\)]+\)|[^=,]+)/)]
# => {"1"=>"2", "3"=>"(4=5,6=7)"}
如果您需要嵌套哈希,请使用递归方法:
def hashify(str)
arr = str.scan(/([^=,]+)=(\([^\)]+\)|[^=,]+)/).map do |key, val|
if val[0] == '(' && val[-1] == ')'
[key, hashify(val[1..-2])]
else
[key, val]
end
end
Hash[arr]
end
hashify "1=2,3=(4=5,6=7)"
# => {"1"=>"2", "3"=>{"4"=>"5", "6"=>"7"}}
请注意,这仍然不能正确处理嵌套括号。你需要一个合适的解析器。