简体   繁体   English

将红宝石哈希转换为另一种格式

[英]convert ruby hash into another format

here is a ruby hash 这是红宝石哈希

hash = {"ss"=>1, "bc/gf"=>"120/22", "bb"=>"hh"}

I want to convert it to 我想将其转换为

{"ss"=>1, "bc"=>"120", "gf" => "22", "bb"=>"hh"}

what I tried 我尝试过的

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]

works fine for me .. but is there a more elegant solution to my problem 对我来说效果很好..但是我的问题有更好的解决方案吗

Using Enumerable#each_with_object : 使用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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM