que tiene una matriz de Perl tareas a realizar que tiene este aspecto:gama de ordenación personalizada en Perl
@todos = (
"1 (A) Complete online final @evm4700 t:2010-06-02",
"3 Write thank-you t:2010-06-10",
"4 (B) Clean t:2010-05-30",
"5 Donate to LSF t:2010-06-02",
"6 (A) t:2010-05-30 Pick up dry cleaning",
"2 (C) Call Chris Johnson t:2010-06-01"
);
Ese primer número es el ID de la tarea. Si una tarea tiene ([A-Z]) junto a, eso define la prioridad de la tarea. Lo que quiero hacer es ordenar la matriz tareas de una manera que coloca los elementos priorizados primera (y en orden de prioridad descendente, de la A - Z):
@todos = (
"1 (A) Complete online final @evm4700 t:2010-06-02",
"6 (A) t:2010-05-30 Pick up dry cleaning",
"4 (B) Clean t:2010-05-30",
"2 (C) Call Chris Johnson t:2010-06-01"
"3 Write thank-you t:2010-06-10",
"5 Donate to LSF t:2010-06-02",
);
no puedo usar un habitual sort()
a causa de esas identificaciones al lado de las tareas, entonces supongo que se necesita algún tipo de subrutina de clasificación personalizada. Sin embargo, mi conocimiento de cómo hacer esto de manera eficiente en Perl es mínimo.
Gracias, todo.
@Sean: Mientras que una transformación de Schwartzian es maravilloso (y aplicable), es muy difícil de seguir, especialmente teniendo en cuenta que el PO es un principiante. – Zaid
@Sean: esta es una solución genial; gracias. ¿Necesita escapar ese ']' ater: alpha :? @Zaid: a pesar de que soy un principiante, @Sean me dio ese enlace que explica la transformación de Schwartz, así que puedo entenderlo. :) – ABach
@ABach: No, no se necesita escaparse; esta es una clase de caracteres POSIX. (Consulte la página de manual de Perlre.) ... Pero hice un error tipográfico ("[: alpha:]]" en lugar de "[[: alpha:]]", que acabo de arreglar. – Sean