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