gpt4 book ai didi

ruby - 初始化和更新深度嵌套哈希的更好方法

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

我有一个Hash,我想在更深的层次上向其中插入一些数据,但在任何层次上都可能缺少一个键。因此,我在每个级别更新其值之前有条件地对其进行初始化。

什么是更好的编写方法或可以使代码不那么丑陋的方法?

data[:foo] ||= {}
data[:foo][:bar] ||= {}
data[:foo][:bar][:baz] ||= []
data[:foo][:bar][:baz] << 99

最佳答案

使用哈希自动生成:

data = Hash.new { |h, k| h[k] = h.dup.clear }
#⇒ {}

# or, credits to @Amadan:
data = Hash.new { |h, k| h[k] = Hash.new(&h.default_proc) }
#⇒ {}

data[:foo][:bar][:baz] = 42
data
#⇒ {:foo=>{:bar=>{:baz=>42}}}

这里使用的技巧是我们使用 Hash#default_proc创建嵌套键。

针对您的情况:

(data[:foo][:bar][:baz] = []) << 99

关于ruby - 初始化和更新深度嵌套哈希的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50468234/

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