将字符串转换为嵌套的 Ruby Hash [] get 方法

Convert string to nested Ruby Hash [] get method

提问人:Pedro 提问时间:7/15/2023 更新时间:7/15/2023 访问量:32

问:

我有一个这样的字符串,我需要用它来访问 Hash 对象中的嵌套字段。基本上,我想做.'[field1][field2]'hash_obj['field1']['field2']

如何将该字符串转换为 Ruby 可以理解为符号的内容,以便我能够访问嵌套的 Hash 字段?

我尝试使用,但没有找到使用它的方法。我找到了其他从字符串生成新哈希对象的帖子,但我找不到一个专门解释使用字符串来构建哈希字段访问权限的帖子。.to_sym

Ruby 字符串 哈希 翻译

评论

0赞 Vasily Kolesnikov 7/15/2023
您能否提供更多示例来说明您的输入字符串是什么?以及您期望以什么结构作为输出。举几个例子。@perdo
0赞 Pedro 7/15/2023
输入字符串的格式类似于“[field1][field2][...]”。我不想生成输出结构。我只需要访问现有哈希的密钥。
0赞 Vasily Kolesnikov 7/15/2023
不幸的是,我仍然不清楚。不过,我认为您的任务可以通过正则表达式来解决。我做了一个简单的:rubular.com/r/WiV5gSPkXd4gDR
0赞 Todd A. Jacobs 7/15/2023
您需要提供一个最小、完整、可执行且可测试的示例。正如所写的那样,在不猜测您的数据结构和输入/输出值的情况下,您的问题无法执行或联合验证。
0赞 Cary Swoveland 7/16/2023
我不明白你的问题。@Vasliy也没有。事实上,在你发布问题后的一天里只有一个答案——显然这个答案反映了对你的问题的误解——这意味着你需要在对问题的陈述中做得更好。我希望可以通过添加几个例子来消除这种混淆。无论如何,当在评论中提出澄清请求时,您应该编辑您的问题,而不是在评论中详细说明。读者应该能够理解问题,而不必通读所有评论......

答:

0赞 Vasily Kolesnikov 7/15/2023 #1
  1. Ruby stdlib 中没有将任意字符串转换为结构的方法(例如 Hash)。
  2. 划分字符串的最简单方法是返回 Array 的 String#split。从数组进行哈希处理要简单得多。
  3. 涵盖所有情况的最常见答案:使用正则表达式:
re = /\[(.*?)\]+/
s = "[field0][foo][bar]"
fields = s.scan(re).flatten
=> ["field0", "foo", "bar"]
fields.each do |field|
  your_existing_hash[field]
end
  1. 如果您描述字符串的来源及其格式(所有不变量),您的任务可能会有一个简单的解决方案。例如,如果你的字符串是 URL 编码的参数 - 那么有一堆库可以解析该字符串。

评论

0赞 Pedro 7/15/2023
就像我在上面的评论中提到的,我不想从输入字符串生成新结构。我只需要访问现有哈希的密钥,输入字符串就会告诉我是哪一个。这对于非嵌套字段来说很容易,但我遇到的情况是输入字符串类似于“[field1][field2][...][fieldX]',我需要以某种方式转换它,以便能够在现有哈希中寻址该键。
0赞 Vasily Kolesnikov 7/15/2023
@Pedro我已经使用正则表达式的示例更新了答案。