Hello everybody.
I've written a method to solve a little problem, but I find my solution
really ugly. So, I'm trying to find ways to improve it.
The method takes one argument, an array containing a sorted list of
strings representing episodes numbers. The episodes numbers are either
a number ('1', '12') or prefixed with a letter ('S1' for special 1). My
goal is to find sequences in the numbers and join them with dashes :
RAniDBTools.format_episodes_list([ '1', '2', '3', '4', '6', '7', '9', 'S1', 'S2' ])
=> "1-4, 6-7, 9, S1-S2"
RAniDBTools.format_episodes_list([ '1', '2', 'S3', 'S4', 'S5', 'O6' ])
=> "1-2, S3-S5, O6"
Here's the code ; what can I do to improve this ?
module RAniDBTools
def RAniDBTools.format_episodes_list(list)
lt =
le =
list.each do |epno|
if ('0'..'9').include? epno[0,1]
t = ''
e = epno.to_i
else
t = epno[0..0]
e = epno[1..-1].to_i
end
if lt.last == t
max = le.last.max rescue le.last
min = le.last.min rescue le.last
if e == max + 1
le[-1] = (min..e)
else
le << e
lt << t
end
else
le << e
lt << t
end
end
f =
le.each_with_index do |e, i|
if e.is_a? Range
f << "#{lt[i]}#{e.min}-#{lt[i]}#{e.max}"
else
f << "#{lt[i]}#{e}"
end
end
f.join(', ')
end
end
TIA,
Fred
···
--
This is the right time, once in a lifetime So I find it hard to sleep,
don't you know The sun is shining in my window, life's in flow Making
music in the morning, laughter's light Creativity touches in for flight
(The Corrs, The Right Time)