gpt4 book ai didi

ruby - 如何使用 Ruby 以有效的方式从字符串中获取所需的格式化散列?

转载 作者:数据小太阳 更新时间:2023-10-29 06:57:50 26 4
gpt4 key购买 nike

当字符串以以下格式出现时,我想以特定格式进行散列:

给定的字符串:

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 = "A\nA = B\nA = B = C\nA = B = D\nA = E = F\nG = H\nG = I\nG = 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

关于ruby - 如何使用 Ruby 以有效的方式从字符串中获取所需的格式化散列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27062717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com