我正在寻找一种干净的方法来执行此操作,我找到了一些解决方法,但没有找到像切片这样的东西(有些人建议使用 gem,但我认为此操作不需要,如果我错了),所以我发现自己的哈希值包含一堆哈希值,我想要一种方法来执行 Slice对此哈希进行操作并从嵌套哈希中获取键/值对,所以问题是:
Ruby中有类似deep_slice的东西吗?
示例:
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 ,它利用 merge!由哈希类提供。
可以测试上面的代码here
关于ruby-on-rails - 如何在 ruby 上的哈希中创建 deep_slice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65756598/