arr = %w| 00:30 03:30 00:01, 05:30 10:20 02:10 14:05 19:06 |
#=> ["00:30", "03:30", "00:01,", "05:30", "10:20", "02:10", "14:05", "19:06"]
sorted = arr.sort
#=> ["00:01,", "00:30", "02:10", "03:30", "05:30", "10:20", "14:05", "19:06"]
idx = sorted.find_index { |s| (s <=> '05:30') >= 0 }
#=> 4
sorted.rotate(idx)
#=> ["05:30", "10:20", "14:05", "19:06", "00:01,", "00:30", "02:10", "03:30"]
См. Array # find_index , String # <=> и Array # rotate.
Далее следует другой путь.
arr.sort_by { |s| (s <=> '05:30') == -1 ? "#{s[0,2].to_i+24}:#{s[2,3]}" : s }
Если s = '02:10'
,
s <=> '05:30' #=> -1
a = s[0,2] #=> "02"
b = a.to_i #=> 2
c = b+24 #=> 26
d = s[2,3] #=> ":10"
"#{c}:#{d}" #=> "26::10"
См. Enumerable # sort_by .