【发布时间】:2019-08-21 02:45:31
【问题描述】:
我正在尝试在哈希中获取嵌套值。我试过使用Hash#fetch 和Hash#dig,但我不明白它们应该如何组合。
我的哈希如下。
response = {
"results":[
{
"type":"product_group",
"value":{
"destination":"Rome"
}
},
{
"type":"product_group",
"value":{
"destination":"Paris"
}
},
{
"type":"product_group",
"value":{
"destination":"Madrid"
}
}
]
}
我已经尝试了以下
response.dig(:results)[0].dig(:value).dig(:destination) #=> nil
response.dig(:results)[0].dig(:value).fetch('destination') #=> Rome
所需的返回值为"Rome"。第二个表达式有效,但我想知道它是否可以简化。
我正在使用 Ruby v2.5 和 Rails v5.2.1.1。
【问题讨论】:
-
在 Ruby 2.4.5 中我没有得到相同的结果。
response.dig(:results)[0].dig(:value).dig(:destination)给出“罗马”,response.dig(:results)[0].dig(:value).fetch('destination')提出KeyError: key not found: "destination" -
我忘了提到我正在使用 ruby 2.5.3p105(2018-10-18 修订版 65156)[x86_64-linux] 和 Rails 5.2.1.1
-
@DavidAldridge 我添加了一张图片,希望现在这个问题更能说明问题
-
您的问题很简单,但我认为它被我很多无关的信息弄糊涂了,我认为这些信息是反对票和投票结束的原因。要突出显示文本中的代码,请用反引号括起来。要突出显示代码块,请将其缩进 4 个空格或选择它并单击
{}按钮。在给出示例时,为所有输入分配一个变量(以便读者可以在答案和 cmets 中引用这些变量而无需定义它们)并始终说明所需或预期的返回值 ("Rome")。 (续...) -
... 最后,在大多数 SO 问题中,您应该说出您想要实现的目标(返回
"Rome"),而无需提及应该如何完成。然后显示您尝试过的方法,即使用dig和fetch。有些人可能会将您的问题视为XY problem 的陈述。 (也有例外,例如当您想使用正则表达式从字符串中提取信息时,尽管您可能会邀请其他不使用正则表达式的解决方案。)如果您不喜欢我的编辑,请随意更改它.这是你的问题!
标签: ruby-on-rails ruby ruby-hash