gpt4 book ai didi

ruby - 转储类似 YAML 的哈希键名

转载 作者:太空宇宙 更新时间:2023-11-03 16:32:22 24 4
gpt4 key购买 nike

获取由点分隔的所有 Hash 键(带嵌套)的列表的简便方法是什么?

鉴于我有一个哈希:

{ level1: { level21: { level31: 'val1', 
level32: 'val2' },
level22: 'val3' }
}

代表散列中所有关键路径的期望输出(字符串数组):

level1.level21.level31
level1.level21.level32
level1.level22

我目前的解决方案:

class HashKeysDumper
def self.dump(hash)
hash.map do |k, v|
if v.is_a? Hash
keys = dump(v)
keys.map { |k1| [k, k1].join('.') }
else
k.to_s
end
end.flatten
end
end

它也可以作为 gist 获得(有规范)。

最佳答案

好吧,这取决于你所说的清洁器是什么意思,但这里有一个更小的版本......

  1. 将在 Hashes 或 Hash-alikes 的子类上工作
  2. 扩展哈希,使其在您的代码中看起来更干净。

    class Hash
    def keydump
    map{|k,v|v.keydump.map{|a|"#{k}.#{a}"} rescue k.to_s}.flatten
    end
    end

结果:

{ level1: { level21: { level31: 'val1', 
level32: 'val2' },
level22: 'val3' }
}.keydump
=> ["level1.level21.level31", "level1.level21.level32", "level1.level22"]

关于ruby - 转储类似 YAML 的哈希键名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13663418/

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