gpt4 book ai didi

ruby - 给定任意长度的 "key path",如何设置 Ruby 哈希?

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

给定:

h = {foo: {bar: 1}}

如果你不知道你有多少个键,如何设置bar

例如:keys = [:foo, :bar]

h[keys[0]][keys[1]] = :ok

但是如果键可以是任意长度并且 h 是任意深度呢?

最佳答案

如果您使用的是 Ruby 2.3+,那么您可以这样使用 dig:

h.dig(*keys[0..-2])[keys.last] = :ok

dig 遵循哈希中的一条路径并返回它找到的内容。但是 dig 不会复制它找到的内容,因此您会得到与 h 中相同的引用。 keys[0..-2] 获取 keys 的最后一个元素以外的所有元素,所以 h.dig(*keys[0..-2]) 为您提供 h 内部的 {bar: 1} 哈希,然后您可以通过简单的赋值就地修改它。

你也可以说:

*head, tail = keys
h.dig(*head)[tail] = :ok

如果你比 [0..-2] 更清楚的话。

如果你没有dig那么你可以这样做:

*head, tail = keys
head.inject(h) { |m, k| m[k] }[tail] = :ok

当然,如果您不确定 keys 指定的路径是否存在,那么您需要进行一些 nil 检查并决定您应该如何处理处理未指定 h 路径的 key

关于ruby - 给定任意长度的 "key path",如何设置 Ruby 哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42425341/

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