ASORT()

Ordena un array

Syntax

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

Arguments

<aDestino> es el nombre del array a ser ordenado.

<nInicio> es el primer elemento para comenzar el ordenamiento. Por defecto es uno.

<nContador> es el número de elementos a ordenar comenzando en la posición <nInicio>. Por defecto son todos los elementos.

<bOrden> es el bloque de código para el orden de ordenamiento, por defecto es en orden ascendente {| x, y | x < y }. El bloque de código debe recibir dos elementos del array como parametros y debe retornar .T. si el orden es el correcto, .F. en caso contrario.

Returns

ASORT() retorna una referencia al reciente array ordenado <aDestino> ó NIL si el parámetro <aDestino> no es un array.

Description

Esta funcion ordena todo ó parte de un array dado. Si <bOrden> es omitido, la función espera que <aDestino> sea un array unidimensional conteniendo un solo tipo de datos (uno de: Character, Date, Logical, Numeric) y ordena este array en orden ascendente: los caracteres son ordenados por su valor ASCII, las fechas son ordenadas cronologicamente el valor lógico .F. va antes de .T. y los valores numéricos son ordenados por su valor.

Si <bOrden> es especificado este es usado para manejar la forma de ordenamiento. Cada vez que el bloque es evaluado, dos elementos del array son pasados al bloque de código, y el bloque debe retornar un valor lógico que define si esos elementos estan en orden (.T.) ó no (.F.). Usando este bloque se puede ordenar arrays multidimensionales hacer un ordenamiento descendente ó aún (pero para que querria Ud. hacerlo) ordenar un array que contenga diferentes tipo de datos.
Examples
      * El siguiente ejemplo ordena valores numericos en orden ascendente

        ASORT( { 3, 1, 4, 42, 5, 9 } )   // Resultado: { 1, 3, 4, 5, 9, 42 }

      * El siguiente ejemplo ordena cadenas en orden descendente
        LOCAL aKeys := { "Ctrl", "Alt", "Delete" }, n
        LOCAL bOrden := {| x, y | UPPER( x ) > UPPER( y ) }
        ASORT( aKeys,,, bOrden )
        FOR n = 1 TO LEN( aKeys )
            ? aKeys [n]          // Resultado: { "Delete", "Ctrl", "Alt"}
        NEXT

      * El siguiente ejemplo ordena dos arrays bidimensionales de acuerdo
        al segundo elemento de cada par.

        LOCAL aPair := { {"Sun",8}, {"Mon",1}, {"Tue",57}, {"Wed",-6} }
        ASORT( aPair,,, {| x, y | x[2] < y[2] } )

        FOR n = 1 TO LEN( aPair )
            ? aPair [n][1],  aPair [n][2]
        NEXT
        // Resultado: { {"Wed",-6}, {"Mon",1}, {"Sun",8}, {"Tue",57} }
Status

Ready

Compliance

La frecuencia de llamada al bloque de código y el orden difiere de Clipper debido a que Harbour usa un algoritmo distinto (más rápido) de ordenamiento (quicksort).

Files

El código fuente está en arrays.c La librería asociada es vm

See Also