tengo una colección de Correos objetos y quiero ser capaz de clasificarlos en base a estas condiciones:Clasificación por las condiciones múltiples en Ruby
- En primer lugar, por categorías (noticias, eventos, laboratorios, cartera, etc. .)
- a continuación, por fecha, si la fecha, o por la posición, si un índice específico se fija para que
Algunos mensajes tendrán fechas (noticias y eventos), otros tendrán posiciones explícitas (laboratorios, y portafolio).
Deseo poder llamar al posts.sort!
, por lo que he reemplazado <=>
, pero estoy buscando la manera más efectiva de ordenar por estas condiciones. A continuación se muestra un método de pseudo:
def <=>(other)
# first, everything is sorted into
# smaller chunks by category
self.category <=> other.category
# then, per category, by date or position
if self.date and other.date
self.date <=> other.date
else
self.position <=> other.position
end
end
Parece como si en realidad tendría que ordenar dos veces por separado, en lugar de abarrotar todo en que un método. Algo así como sort_by_category
, luego sort!
. ¿Cuál es la forma más rápida de hacer esto?
Gracias, yo no era consciente de '# distinto de cero numérico?'. ¿No es un poco extraño que un '' '-método devuelva valores no booleanos? –
@Mladen: Sí, pero bastante útil. Otro ejemplo en el que puedes esperar un 'verdadero/falso':' String
Esto es un poco engañoso: 'post_ary.sort_by {| a, b | (a.category <=> ...)} ' sort_by no toma un bloque con dos argumentos. En cambio, para problemas de clasificación más complejos, debe devolver una matriz. Es decir: 'post_ary.sort_by {| a | [a.category, a.date, a.position]} ' – Timo