Если я получу точку, см. Мой комментарий, учитывая переменную @time
:
@time = {"time"=>[{"begin"=>:washington, "end"=>:briston, "min"=>6, "price"=>3}, {"begin"=>:briston, "end"=>:dallas, "min"=>4, "price"=>2}, {"begin"=>:dallas, "end"=>:tokyo, "min"=>3.5, "price"=>3}, {"begin"=>:tokyo, "end"=>:chicago, "min"=>3.5, "price"=>3}]}
Один путь к цепочке, для рефакторинга:
ary = @time['time']
start = :washington
stop = :tokyo
res = []
loop do
tmp = ary.find { |h| h['begin'] == start }
break unless tmp
res << tmp
start = tmp['end']
break if start == stop
end
Тогда у вас естьres
:
#=> [{"begin"=>:washington, "end"=>:briston, "min"=>6, "price"=>3}, {"begin"=>:briston, "end"=>:dallas, "min"=>4, "price"=>2}, {"begin"=>:dallas, "end"=>:tokyo, "min"=>3.5, "price"=>3}]
Например, получить сумму min
:
res.sum { |h| h['min'] } #=> 13.5