he implementado un algoritmo de ordenación de una cadena personalizada que representa ya sea datos de distancia de la pista & eventos de campo de tiempo o. A continuación se muestra el formatoOrdenar una cadena que podría contener un tiempo o distancia
'10: 03.00 - Cualquiera de diez minutos y tres segundos o 10 pies, tres pulgadas
El resultado de eso es que para los eventos de campo, de banda o salto más largo sería el primer elemento mientras que para correr eventos, el mejor tiempo sería el primero. A continuación se muestra el código que estoy usando actualmente para eventos de campo. No publiqué el running_event_sort
ya que es la misma lógica con el mayor/menor que el intercambio. Mientras funciona, parece demasiado complejo y necesita ser refactorizado. Estoy abierto a sugerencias. Cualquier ayuda sería genial.
event_participants.sort!{ |a, b| Participant.field_event_sort(a, b) }
class Participant
def self.field_event_sort(a, b)
a_parts = a.time_distance.scan(/'([\d]*):([\d]*).([\d]*)/)
b_parts = b.time_distance.scan(/'([\d]*):([\d]*).([\d]*)/)
if(a_parts.empty? || b_parts.empty?)
0
elsif a_parts[0][0] == b_parts[0][0]
if a_parts[0][1] == b_parts[0][1]
if a_parts[0][2] > b_parts[0][2]
-1
elsif a_parts[0][2] < b_parts[0][2]
1
else
0
end
elsif a_parts[0][1] > b_parts[0][1]
-1
else
1
end
elsif a_parts[0][0] > b_parts[0][0]
-1
else
1
end
end
end
Gracias por la ayuda. Necesito agregar algunas validaciones para asegurarme de que el campo de tiempo/distancia esté en el formato correcto. Necesito leer sobre el método .map para entender lo que realmente está haciendo. –
#map toma un Enumerable (en este caso, una matriz) y ejecuta el bloque dado en cada elemento, devolviendo una matriz de resultados (en el mismo orden, en este caso) – rampion