我有一个散列,其中包含诸如...的值
EXAMPLE = {
"101" => "SO01",
"102" => "SO02",
"103" => "SO03",
"105" => %w(S005 SO04)
}
我想在散列中搜索 SO04 并返回“105”,或者“SO03”并返回“103”。我敢肯定有一个很好的方法可以做到这一点,但目前我已经忘记了。我一直只是简单地使用 EXAMPLE.key() 但现在我意识到那里有数组,这不会削减它。
最佳答案
试试这个:
>> EXAMPLE = {"101" => "SO01",
"102" => "SO02",
"103" => "SO03",
"105" => %w(SO05 SO04)}
>> EXAMPLE.find { |_,v| Array(v).include?('SO02') }.try(:first)
=> "102"
>> EXAMPLE.find { |_,v| Array(v).include?('SO05') }.try(:first)
=> "105"
>> EXAMPLE.find { |_,v| Array(v).include?('SO06') }.try(:first)
=> nil
.first
最后是必需的,因为 #find
返回一个 [key, value]
的数组。
如果您使用的是 Ruby 2.3 或更高版本,则可以使用安全导航运算符代替 try
:
>> EXAMPLE.find { |_,v| Array(v).include?('SO05') }&.first
=> "105"
>> EXAMPLE.find { |_,v| Array(v).include?('SO06') }&.first
=> nil
关于ruby-on-rails - 检查可能是单个字符串或字符串数组的散列值的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41290232/