Arrays 如何使用嵌套数组从哈希中获取哈希键?
在我的Ruby on Rails应用程序中,我有一个包含嵌套数组的哈希:Arrays 如何使用嵌套数组从哈希中获取哈希键?,arrays,ruby,hash,Arrays,Ruby,Hash,在我的Ruby on Rails应用程序中,我有一个包含嵌套数组的哈希: COLORS = { :red => %w(draft open deactivated), :green => %w(sent downloaded paid activated) } 有没有一种方法可以提交一个数组值(如draft)来获取相应的哈希键 lookup_hash("draft") # => :red 感谢您的帮助。如果给定元素存在于多个数组中,该怎么办?如果这不是问题的
COLORS = {
:red => %w(draft open deactivated),
:green => %w(sent downloaded paid activated)
}
有没有一种方法可以提交一个数组值(如draft)来获取相应的哈希键
lookup_hash("draft") # => :red
感谢您的帮助。如果给定元素存在于多个数组中,该怎么办?如果这不是问题的话
def lookup_hash(item)
COLORS.find { |k, v| v.include?(item) }&.first
end
如果给定元素存在于多个数组中怎么办?如果这不是问题的话
def lookup_hash(item)
COLORS.find { |k, v| v.include?(item) }&.first
end
另一个想法是反转哈希以获得更清晰的代码:
STATUS_COLORS = {
draft: :red,
open: :red,
deactivated: :red,
sent: :green,
downloaded: :green,
paid: :green,
activated: :green,
}
然后只需执行STATUS\u COLORS.fetchstatus.to\u sym。它更详细一点,但访问它的代码更可读一点。另一个想法是反转哈希以获得更清晰的代码:
STATUS_COLORS = {
draft: :red,
open: :red,
deactivated: :red,
sent: :green,
downloaded: :green,
paid: :green,
activated: :green,
}
然后只需执行STATUS\u COLORS.fetchstatus.to\u sym。它有点冗长,但是访问它的代码更可读。谢谢。任何元素都不会出现两次。那就完美了!:在Ruby 2.4和安全导航:COLORS.find{k,v | break k if v.include?open}之前。如果要经常这样做,您可能需要反转查找表,使其结构类似于{draft=>:red,open=>:red,sent=>:green,}。因为需要一个键或nil,以下内容可能会更好理解,并避免使用安全导航操作符:COLORS.each_key.find{k | COLORS[k]。include?item}。谢谢。任何元素都不会出现两次。那就完美了!:在Ruby 2.4和安全导航:COLORS.find{k,v | break k if v.include?open}之前。如果要经常这样做,您可能需要反转查找表,使其结构类似于{draft=>:red,open=>:red,sent=>:green,}。因为需要一个键或nil,以下内容可以更好地阅读,避免使用安全导航操作符:COLORS.each_key.find{k | COLORS[k]。include?item}。当然,我们不知道颜色的结构是否需要用于与此问题无关的目的。还有,为什么这里的键是符号而不是字符串?除此之外,如果必须进行多次查找,则该概念将非常有用。也许只需要使用一个变量或实例变量:hinvert=COLORS.each_with_object{}{{k,v,h{v.each{s}h[s]=k}。然后就是hinvert[target]。我们没有,我只是根据问题中给出的上下文进行猜测。这主要是按照惯例的符号,但如果字符串更适合他们的应用,他们可以自由使用字符串。当然,我们不知道颜色的结构是否需要用于与这个问题无关的目的。还有,为什么这里的键是符号而不是字符串?除此之外,如果必须进行多次查找,则该概念将非常有用。也许只需要使用一个变量或实例变量:hinvert=COLORS.each_with_object{}{{k,v,h{v.each{s}h[s]=k}。然后就是hinvert[target]。我们没有,我只是根据问题中给出的上下文进行猜测。这主要是按照惯例使用的符号,但如果字符串更适合他们的应用程序,他们可以自由使用字符串。