如何使用Ruby以有效的方式从字符串中获取所需的格式化哈希?
发布时间:2020-12-17 04:20:58 所属栏目:百科 来源:网络整理
导读:当字符串以下面的格式出现时,我想以特定格式哈希: 给定字符串: str = 'AA = BA = B = CA = B = DA = E = FG = HG = IG = J' #进入这样的哈希(必需的哈希模式): { "A" = { "B" = { "C" = nil,"D" = nil },"E" = { "F" = nil },},"G" = { "H" = nil,"I" = n
当字符串以下面的格式出现时,我想以特定格式哈希:
给定字符串: str = 'A A = B A = B = C A = B = D A = E = F G = H G = I G = J' #进入这样的哈希(必需的哈希模式): { "A" => { "B" => { "C" => nil,"D" => nil },"E" => { "F" => nil },},"G" => { "H" => nil,"I" => nil,"J" => nil } } 我尝试了很多方法,但这是最接近的: output = Hash.new line_hash = Hash.new str.each_line do |line| arr = line.split("=") e = arr.first.strip line_hash[e] = {} arr.each_with_index do |ele,i| break unless arr[i+1] line_hash[ele.strip] = arr[i+1] unless output.keys.include?(ele.strip) end output[e] = line_hash unless output.keys.include?(e) end 解决方法str = "AnA = BnA = B = CnA = B = DnA = E = FnG = HnG = InG = J" curr = h = {} str.each_line { |l| l.chomp.split(/s*=s*/m).each { |c| curr = curr[c] ||= {}; } curr = h } puts h # => { # "A" => { # "B" => { # "C" => {},# "D" => {} # },# "E" => { # "F" => {} # } # },# "G" => { # "H" => {},# "I" => {},# "J" => {} # } # } 我希望你能原谅我留下空的哈希值而不是叶子上的空值,以便清楚地解决问题. 要使叶子无效: def leaves_nil! hash hash.each { |k,v| v.empty? ? hash[k] = nil : leaves_nil!(hash[k]) } end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |