ASORT()
 Ordena una matriz
------------------------------------------------------------------------------
 Sintaxis

     ASORT(<aDestino>, [<nInicio>],
        [<nPosiciones>], [<bOrden>]) --> aDestino

 Argumentos

     <aDestino> es la matriz que se va a ordenar.

     <nInicio> es el primer elemento que se va a ordenar. Si no se
     especifica, la posición inicial por defecto es uno.

     <nPosiciones> es el número de elementos que se van a ordenar. Si no
     se especifica, se ordenan los elementos de la matriz desde el elemento
     inicial.

     <bOrden> es un bloque de código opcional que se utiliza para
     determinar el criterio de ordenación. Si no se especifica, el criterio
     por defecto es ascendente.

 Devuelve

     ASORT() devuelve una referencia a la matriz <aDestino>.

 Descripción

     ASORT() es una función de matrices que clasifica, total o parcialmente,
     una matriz que contiene elementos del mismo tipo de datos. Los tipos
     de datos que pueden ordenarse son caracteres, fechas, valores lógicos y
     numéricos.

     Si no se especifica el argumento <bOrden>, el orden por defecto es
     ascendente. Los elementos con valores bajos se sitúan al principio de
     la matriz (primer elemento) y los elementos con valores altos se
     colocan al final de la misma (último elemento).

     Si se especifica un argumento <bOrden> en forma de bloque, el bloque se
     evalúa para determinar el orden de clasificación. Cada vez que se
     evalúa el bloque, se le pasan como parámetros dos elementos de la
     matriz destino. El bloque devuelve verdadero (.T.) si los elementos
     están en el orden correcto. Esta opción permite crear un criterio de
     ordenación descendente o cualquier otro. Consulte los ejemplos
     siguientes.

     Al ordenarse, las cadenas de caracteres se sitúan secuencialmente según
     el valor de su código ASCII; los valores lógicos se clasifican con
     falso (.F.) como valor bajo; los valores de fecha se clasifican
     cronológicamente; y los valores numéricos se clasifican por su
     magnitud.

 Notas

      ASORT() sólo garantiza un resultado ordenado (como se define
        en el bloque), no el mantenimiento de cualquier orden natural
        existente en el proceso.

      Como CA-Clipper crea las matrices multidimensionales anidando
        submatrices dentro de otras matrices, ASORT() no puede ordenar
        directamente una matriz multidimensional. Para ordenar una matriz
        anidada, debe especificarse un bloque de código que permita manejar
        adecuadamente submatrices.

 Ejemplos

      El ejemplo siguiente crea una matriz de cinco elementos sin
        ordenar, la clasifica en orden ascendente y, a continuación, la
        clasifica en orden descendente con un bloque de código:

        aMatriz := { 3, 5, 1, 2, 4 }
        ASORT(aMatriz)
        //Resultado: { 1, 2, 3, 4, 5 }

        ASORT(aMatriz,,, { |x, y| x > y })
        //Resultado: { 5, 4, 3, 2, 1 }

      El ejemplo siguiente ordena una matriz de cadenas de
        caracteres en orden ascendente, sin diferenciar mayúsculas o
        minúsculas. Para ello, utiliza un bloque de código que convierte los
        elementos en mayúsculas antes de compararlos:

        aMatriz := { "Federico", "Catalina", "ALBERTO", "amigo" }
        ASORT(aMatriz,,, { |x, y| UPPER(x) < UPPER(y) })

      El ejemplo siguiente clasifica una matriz anidada utilizando
        el segundo elemento de cada submatriz:

        aChicos := { {"María", 14}, {"José", 23}, {"Arturo", 16} }
        aClasifChicos := ASORT(aChicos,,, { |x, y| x[2] < y[2] })

        Resultado:

        { {"María", 14}, {"Arturo", 16}, {"José", 23} }

 Ficheros   La biblioteca asociada es EXTEND.LIB.

 To download this example - click here.

See Also: ASCAN() EVAL() SORT