这是我之前发布的another topic的关注问题。
说我有以下哈希。
my_hash = {
'array1' => %w[
value1
value2
],
'array2' => %w[
value3
value4
]
}
在其中一个数组中获取特定值的密钥的最快或最简单的方法是什么。例如,我想获取value2的键,获取array1,或获取value3的键并获取array2
答案 0 :(得分:1)
使用现有数据结构最快的是扫描哈希中的所有数组:
key, _ = my_hash.find{|k, v| v.include? "value3" }
如果此查找是多次执行的操作,并且您需要比这更快,您可以考虑一种允许更快查找的数据结构,如下所示:
value1
,value2
等)将指向初始哈希中的相应键(如果所有值都是唯一的)。答案 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