将 ruby 散列转换为另一种格式
convert ruby hash into another format
这是一个 ruby 散列
hash = {"ss"=>1, "bc/gf"=>"120/22", "bb"=>"hh"}
我想将其转换为
{"ss"=>1, "bc"=>"120", "gf" => "22", "bb"=>"hh"}
我试过的
key_arr = has.keys.map{|s| s.split("/")}.flatten
val_arr = has.values.map(&:to_s).map{|s| s.split("/")}.flatten
Hash[*key_arr.zip(val_arr).flatten]
对我来说很好..但是有没有更优雅的解决方案来解决我的问题
使用Enumerable#each_with_object
:
hash = {"ss"=>1, "bc/gf"=>"120/22", "bb"=>"hh"}
hash.each_with_object({}) { |(key, value), h|
value = value.to_s
key.split('/').zip(value.split('/')) { |k, v|
h[k] = v
}
}
# {"ss"=>"1", "bc"=>"120", "gf"=>"22", "bb"=>"hh"}
hash = {"ss"=>1, "bb/gf"=>"120/22", "bb"=>"hh"}
hash2 = hash.inject({}) do |h, (key, value)|
h.merge([ key.to_s.split('/'), value.to_s.split('/')].transpose.to_h)
end
这是一个 ruby 散列
hash = {"ss"=>1, "bc/gf"=>"120/22", "bb"=>"hh"}
我想将其转换为
{"ss"=>1, "bc"=>"120", "gf" => "22", "bb"=>"hh"}
我试过的
key_arr = has.keys.map{|s| s.split("/")}.flatten
val_arr = has.values.map(&:to_s).map{|s| s.split("/")}.flatten
Hash[*key_arr.zip(val_arr).flatten]
对我来说很好..但是有没有更优雅的解决方案来解决我的问题
使用Enumerable#each_with_object
:
hash = {"ss"=>1, "bc/gf"=>"120/22", "bb"=>"hh"}
hash.each_with_object({}) { |(key, value), h|
value = value.to_s
key.split('/').zip(value.split('/')) { |k, v|
h[k] = v
}
}
# {"ss"=>"1", "bc"=>"120", "gf"=>"22", "bb"=>"hh"}
hash = {"ss"=>1, "bb/gf"=>"120/22", "bb"=>"hh"}
hash2 = hash.inject({}) do |h, (key, value)|
h.merge([ key.to_s.split('/'), value.to_s.split('/')].transpose.to_h)
end