如何在ruby中的嵌套哈希中获取特定值的键?

时间:2015-11-10 16:02:08

标签: ruby

这是我之前发布的another topic的关注问题。

说我有以下哈希。

my_hash = {
  'array1' => %w[
    value1
    value2
  ],
  'array2' => %w[
    value3
    value4
  ]
}

在其中一个数组中获取特定值的密钥的最快或最简单的方法是什么。例如,我想获取value2的键,获取array1,或获取value3的键并获取array2

2 个答案:

答案 0 :(得分:1)

使用现有数据结构最快的是扫描哈希中的所有数组:

key, _ = my_hash.find{|k, v| v.include? "value3" }

如果此查找是多次执行的操作,并且您需要比这更快,您可以考虑一种允许更快查找的数据结构,如下所示:

  • 将内部数组转换为Sets
  • 构造反向查找Hash,其中值(value1value2等)将指向初始哈希中的相应键(如果所有值都是唯一的)。

答案 1 :(得分:0)

my_hash.detect { |_, v| v.include? 'value2' }.first

请注意,如果有很多键,在values数组中有value2,这种方法将返回第一个键。

要接收所有键,可以使用:

my_hash.select { |_, v| v.include? 'value2' }.to_h.keys

或:

my_hash.map { |k, v| k if v.include?('value2') }.compact