Один (не очень прямой) способ сделать это может быть инвертировать Хэш , расширяющий каждый массив, чтобы сделать каждый элемент ключом:
tab_details = {
'foo' => [2, 3, 5],
'bar' => [1, 4, 6]
}
# => {"foo"=>[2, 3, 5], "bar"=>[1, 4, 6]}
inverted_hash = tab_details.each_with_object({}) do |(k, ary), out|
ary.each { |elem| out[elem] = k }
end
# => {2=>"foo", 3=>"foo", 5=>"foo", 1=>"bar", 4=>"bar", 6=>"bar"}
input = 1
inverted_hash[input]
# => "bar"
Теперь, конечно, предполагается, что input
и элементы массива имеют того же типа , то есть Integer.Вы можете конвертировать их в соотв.к тому, что дано в вашем вопросе:
# If all the array elements are strings
inverted_hash[input.to_s]
# => "bar"
Другое предположение, которое он делает, состоит в том, что нет элемента, присутствующего в более чем в одном массиве .