我正在寻找一种干净的方法来执行此操作,我找到了一些解决方法,但没有找到类似切片的东西(有些人建议使用 gem,但我认为此操作不需要,如果我错了,请纠正我) ,所以我发现自己有一个包含一堆哈希值的哈希值,我想要一种方法来执行Slice https://apidock.com/rails/Hash/slice对此哈希进行操作并从嵌套哈希中获取键/值对,所以问题是:
ruby 中有类似 deep_slice 的东西吗?
Example:
input: a = {b: 45, c: {d: 55, e: { f: 12}}, g: {z: 90}}, keys = [:b, :f, :z]
expected output: {:b=>45, :f=>12, :z=>90}
提前谢谢! ????
环顾了一段时间后,我决定自己实现这个,这就是我修复它的方法:
a = {b: 45, c: {d: 55, e: { f: 12}}, g: {z: 90}}
keys = [:b, :f, :z]
def custom_deep_slice(a:, keys:)
result = a.slice(*keys)
a.keys.each do |k|
if a[k].class == Hash
result.merge! custom_deep_slice(a: a[k], keys: keys)
end
end
result
end
c_deep_slice = custom_deep_slice(a: a, keys: keys)
p c_deep_slice
上面的代码很经典DFS https://en.wikipedia.org/wiki/Depth-first_search,它利用了merge! https://apidock.com/ruby/Hash/merge由哈希类提供。
您可以测试上面的代码here https://repl.it/languages/ruby?v2=1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)