如何通过字符串数组在哈希中查找嵌套的ruby属性?

更新于
2026-10-10 01:13:40
1阅读来源:SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计383个文字,预计阅读时间需要2分钟。

如何通过字符串数组在哈希中查找嵌套的ruby属性?

在考虑嵌套哈希中可能存在的一组属性时,可以使用以下属性选择器进行搜索:`property_selector=['component_styles', 'styles', 'background', 'color']`。以下是一个可能的嵌套哈希值示例:

pythonobject_to_search_containing_property={ some_attr: 'blah', component_styles: {'color': 'red', 'background': 'blue'}}

考虑嵌套哈希中可能存在的一组属性:

property_selector = ['component_styles', 'styles', 'background' ,'color']

以下嵌套哈希值是可能的:

object_to_search_containing_property = { some_attr: 'blah', component_styles: { styles: { background: { color: 'fff' } } } } object_to_search_not_containing_property = { some_attr: 'blah', component_styles: { } }

有没有办法迭代通过property_selector来搜索这些对象来检查属性嵌套的每个级别?

Ruby中有什么东西可以做类似于:

property_selector.each do |property| object[property][next_property] ... [property.length - 1] end

更新

抱歉,之前没有提及,但我使用的是Ruby 2.2.3版.

你是Ruby 2.3吗?试试 Hash#dig:

object_to_search_containing_property.dig(*property_selector) # => "fff" object_to_search_not_containing_property.dig(*property_selector) # => nil

唯一的问题是属性选择器数组的元素是字符串,但是您使用符号键构建嵌套对象.像这样定义属性选择器数组,而不是上面的代码工作:

property_selector = [:component_styles, :styles, :background, :color]

或者,如果您无法控制如何定义该数组,则可以动态转换它:

如何通过字符串数组在哈希中查找嵌套的ruby属性?

object.dig(*property_selector.map(&:to_sym))

这是一个便携式方法:

def dig(object, *keys) keys.each do |key| break unless object.respond_to?(:[]) object = object[key] end object end dig(object_to_search_containing_property, *property_selector) # => "fff" dig(object_to_search_not_containing_property, *property_selector) # => nil

关于属性选择器数组的相同警告也适用于此处.

本文共计383个文字,预计阅读时间需要2分钟。

如何通过字符串数组在哈希中查找嵌套的ruby属性?

在考虑嵌套哈希中可能存在的一组属性时,可以使用以下属性选择器进行搜索:`property_selector=['component_styles', 'styles', 'background', 'color']`。以下是一个可能的嵌套哈希值示例:

pythonobject_to_search_containing_property={ some_attr: 'blah', component_styles: {'color': 'red', 'background': 'blue'}}

考虑嵌套哈希中可能存在的一组属性:

property_selector = ['component_styles', 'styles', 'background' ,'color']

以下嵌套哈希值是可能的:

object_to_search_containing_property = { some_attr: 'blah', component_styles: { styles: { background: { color: 'fff' } } } } object_to_search_not_containing_property = { some_attr: 'blah', component_styles: { } }

有没有办法迭代通过property_selector来搜索这些对象来检查属性嵌套的每个级别?

Ruby中有什么东西可以做类似于:

property_selector.each do |property| object[property][next_property] ... [property.length - 1] end

更新

抱歉,之前没有提及,但我使用的是Ruby 2.2.3版.

你是Ruby 2.3吗?试试 Hash#dig:

object_to_search_containing_property.dig(*property_selector) # => "fff" object_to_search_not_containing_property.dig(*property_selector) # => nil

唯一的问题是属性选择器数组的元素是字符串,但是您使用符号键构建嵌套对象.像这样定义属性选择器数组,而不是上面的代码工作:

property_selector = [:component_styles, :styles, :background, :color]

或者,如果您无法控制如何定义该数组,则可以动态转换它:

如何通过字符串数组在哈希中查找嵌套的ruby属性?

object.dig(*property_selector.map(&:to_sym))

这是一个便携式方法:

def dig(object, *keys) keys.each do |key| break unless object.respond_to?(:[]) object = object[key] end object end dig(object_to_search_containing_property, *property_selector) # => "fff" dig(object_to_search_not_containing_property, *property_selector) # => nil

关于属性选择器数组的相同警告也适用于此处.