each
будет повторяться для каждого значения ключа (даже если найдено одно совпадение), но detect
остановится, как только будет найдено совпадение.
Я думаю, что ключи для хэша уникальны, поэтому detect
лучше, чем each
mtahash.detect { |k, v| k.to_s == current_line && v.include?(current_station) } ? 'got it' : 'fish'
Сокращение итераций.
> mtahash = {:n=>["timesq", "34thn", "28thn", "23rdn", "Union_Square", "8th"], :l=>["8th", "6th", "Union_Square", "3rd", "1st"], :s=>["Grand Central", "33rds", "28th", "23rds", "Union Square", "Astor Place"]}
> current_line, current_station = 'l', '3rd'
=> ["l", "3rd"]
> mtahash.detect { |k, v| k.to_s == current_line && v.include?(current_station) } ? 'got it' : 'fish'
=> "got it"
> current_line, current_station = 'l', '43rd'
=> ["l", "43rd"]
> mtahash.detect { |k, v| k.to_s == current_line && v.include?(current_station) } ? 'got it' : 'fish'
=> "fish"