加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读