Я только что написал эту ... ужасную строку кода на Ruby, и мне интересно, нет ли лучшего способа сделать это.
У меня есть массив хэшей, из которых я хочу получить один. «Условия» того, что я хочу выбрать, находятся в двух отдельных массивах - один с ключами и один со значениями. Если хеш в массиве имеет правильные значения key == value
для каждой пары в keys
и values
, я хочу вернуть этот хэш.
Какие-нибудь указатели, чтобы сделать код более читабельным?
arr = [
{:foo => 'foo', :bar => 'bar', :baz => 'baz'},
{:foo => 'bar', :bar => 'bar', :baz => 'bar'},
{:foo => 'foo', :bar => 'foo', :baz => 'foo'},
]
keys = [:foo, :bar]
values = ['foo', 'bar']
arr.select{|c| keys.map{|k| i = keys.index(k); c[keys[i]] == values[i]}.delete(false) != false}.first
# => {:foo => 'foo', :bar => 'bar', :baz => 'baz'}