这是另一个“在Ruby中做X最优雅的方式”类型的问题。考虑来自Web服务的响应,其中返回主体的每一行上的键:值对沿着
行key1:val1
key2:val2
key3:val3
我想用这个数据{"key1" => "val1", ...}
创建一个Ruby哈希。从算法上讲,我可以完成
hash = {}
body.lines.each do |line|
key, val = line.split(':')
hash[key] = val
end
但我猜测有一个单线或双线更优雅。
答案 0 :(得分:2)
这是我的建议:
lines = [
'key1:val1',
'key2:val2',
'key3:val3'
]
hash = Hash[lines.map {|it| it.split(':', 2)}]
<强>解释强>
Hash[object]
从对象创建一个新哈希。对象是以下之一:
答案 1 :(得分:1)
如果您有一对对象,则Hash[]
是您的朋友:
Hash[lines.map {|key_val| key_val.split(":")}]
=> {"key1"=>"val1", "key2"=>"val2", "key3"=>"val3"}
该死的,太慢......
答案 2 :(得分:0)
帖子中有插入符号,所以真正的主题解决方案是
hash = Hash[lines.split(/\s/).map {|line| line.split(':', 2)}]