提问人:Pedro 提问时间:7/15/2023 更新时间:7/15/2023 访问量:32
将字符串转换为嵌套的 Ruby Hash [] get 方法
Convert string to nested Ruby Hash [] get method
问:
我有一个这样的字符串,我需要用它来访问 Hash 对象中的嵌套字段。基本上,我想做.'[field1][field2]'
hash_obj['field1']['field2']
如何将该字符串转换为 Ruby 可以理解为符号的内容,以便我能够访问嵌套的 Hash 字段?
我尝试使用,但没有找到使用它的方法。我找到了其他从字符串生成新哈希对象的帖子,但我找不到一个专门解释使用字符串来构建哈希字段访问权限的帖子。.to_sym
答:
0赞
Vasily Kolesnikov
7/15/2023
#1
- Ruby stdlib 中没有将任意字符串转换为结构的方法(例如 Hash)。
- 划分字符串的最简单方法是返回 Array 的 String#split。从数组进行哈希处理要简单得多。
- 涵盖所有情况的最常见答案:使用正则表达式:
re = /\[(.*?)\]+/
s = "[field0][foo][bar]"
fields = s.scan(re).flatten
=> ["field0", "foo", "bar"]
fields.each do |field|
your_existing_hash[field]
end
- 如果您描述字符串的来源及其格式(所有不变量),您的任务可能会有一个简单的解决方案。例如,如果你的字符串是 URL 编码的参数 - 那么有一堆库可以解析该字符串。
评论
0赞
Pedro
7/15/2023
就像我在上面的评论中提到的,我不想从输入字符串生成新结构。我只需要访问现有哈希的密钥,输入字符串就会告诉我是哪一个。这对于非嵌套字段来说很容易,但我遇到的情况是输入字符串类似于“[field1][field2][...][fieldX]',我需要以某种方式转换它,以便能够在现有哈希中寻址该键。
0赞
Vasily Kolesnikov
7/15/2023
@Pedro我已经使用正则表达式的示例更新了答案。
评论