ASORT( ) (Función)
Ordena los elementos de una matriz en sentido ascendente o descendente.
ASORT(ArrayName [, nStartElement [, nNumberSorted [, nSortOrder [, nFlags]]])
Valores devueltos
Numeric
Parámetros
ArrayName
Especifica el nombre de la matriz que va a ordenar.nStartElement
Especifica el elemento inicial de la ordenación. Si omite nStartElement, de forma predeterminada la matriz se ordenará a partir de su primer elemento. Si la matriz es de una dimensión, la ordenación incluirá nStartElement. Si la matriz es de dos dimensiones, el elemento inicial nStartElement determinará tanto la fila donde comienza el orden como la columna que determina el sentido en que se ordenan las filas.Nota Puede hacer referencia de dos formas a un elemento de una matriz de dos dimensiones. El primer método utiliza dos subíndices para especificar la posición de fila y columna del elemento de la matriz; el otro método utiliza un número de elemento. Esta función y otras que manipulan matrices de dos dimensiones requieren números de elemento (en ASORT( ) las expresiones numéricas nStartElement y nNumberSorted). Puede utilizar AELEMENT( ) para devolver el número de elemento correspondiente a los subíndices de fila y columna de una matriz de dos dimensiones.
El ejemplo siguiente muestra que el elemento inicial nStartElement determina cómo se ordenan las filas en una matriz de dos dimensiones. Se crea una pequeña matriz denominada
gaArray
y se ordena dos veces. La primera ordenación comienza por el primer elemento degaArray
y las filas se ordenan según los valores contenidos en la primera columna de la matriz. La segunda ordenación comienza por el cuarto elemento degaArray
y las filas se ordenan según los valores contenidos en la segunda columna.La primera vez se ordena a partir de la primera fila. La segunda ordenación comienza por la segunda fila. Puede utilizar DISPLAY MEMORY para mostrar el contenido de la matriz; en estos ejemplos se utilizan tablas para mostrar gráficamente el resultado del orden.
Estos comandos crean la matriz denominada
gaArray
:DIMENSION gaArray(3,2) gaArray(1) = 'G' gaArray(2) = 'A' gaArray(3) = 'C' gaArray(4) = 'Z' gaArray(5) = 'B' gaArray(6) = 'N'
gaArray
tiene la apariencia siguiente:Columna 1 Columna 2 Fila 1 G A Fila 2 C Z Fila 3 B N Luego se ordena la matriz con ASORT( ) a partir del primer elemento (1,1) de la matriz. Los elementos de la primera columna se ordenan en sentido ascendente al reorganizar las filas de la matriz.
=ASORT(gaArray,1)
Observe el nuevo orden de las filas:
Columna 1 Columna 2 Fila 1 B N Fila 2 C Z Fila 3 G A Luego se ordena la matriz a partir del cuarto elemento (2,2) de la matriz. Los elementos de la segunda columna se ordenan al reorganizar las filas de la matriz.
=ASORT(gaArray,4)
Observe la diferencia en el orden de las filas:
Columna 1 Columna 2 Fila 1 B N Fila 2 G A Fila 3 C Z nNumberSorted
Especifica el número de elementos que se ordenan en una matriz de una dimensión o el número de filas que se ordenan en una matriz de dos dimensiones. Por ejemplo, si la matriz es de una dimensión y nStartElement es 2, que indica que la ordenación comenzará por el segundo elemento de la matriz, y nNumberSorted es 3, que indica que el orden debe incluir tres elementos, se ordenarán los elementos segundo, tercero y cuarto de la matriz. Si nNumberSorted es –1 o se omite, se ordenarán todos los elementos de la matriz, desde el elemento inicial nStartElement hasta el último elemento.Si la matriz es de dos dimensiones, nNumberSorted designará el número de filas que se van a ordenar, a partir de la fila que contiene el elemento inicial nStartElement. Por ejemplo, si nStartElement es 2 y nNumberSorted es 3, se ordenarán la fila que contiene el segundo elemento de la matriz y las dos filas siguientes. Si nNumberSorted es –1 o se omite, se ordenarán todas las filas de la matriz, desde la fila que contiene nStartElement hasta la última fila de la matriz.
nSortOrder
Especifica el sentido de ordenación (ascendente o descendente) para los elementos de la matriz. De forma predeterminada, los elementos de la matriz se ordenan en sentido ascendente. Si nSortOrder es 0 o se omite, los elementos de la matriz se ordenarán en sentido ascendente. Si nSortOrder es cualquier valor positivo, los elementos de la matriz se ordenarán en sentido descendente.nFlags
Especifica criterios de búsqueda que distinguen entre mayúsculas y minúsculas para aplicarlos a la función de orden. Los valores válidos son 0 (el predeterminado) y 1. ASORT( ) utiliza la secuencia de orden actual (vea SET COLLATE) para determinar el sentido del orden. Ciertas secuencias de orden (como "GENERAL") no distinguen entre mayúsculas y minúsculas; si se especifica nFlags = 0 no se ordena distinguiendo entre mayúsculas y minúsculas.El parámetro nFlags sólo es útil cuando la secuencia de orden actual distingue entre mayúsculas y minúsculas (como "MACHINE") y se desea ordenar sin distinguir entre mayúsculas y minúsculas.
El número que se especifica en nFlags proporciona un valor de bit que determinar si el orden distingue entre mayúsculas y minúsculas, de acuerdo con la tabla siguiente:
nFlag Bit Descripción 0 000 Distingue mayúsculas de minúsculas 1 001 No distingue mayúsculas de minúsculas
Nota Si especifica nFlags, puede omitir los demás parámetros; para ello, páselos como -1.
Observaciones
Todos los elementos incluidos en la ordenación deben ser del mismo tipo de datos. Las matrices de una dimensión se ordenan por elementos, mientras que las matrices de dos dimensiones se ordenan por filas. Cuando se ordena una matriz de dos dimensiones, el orden de las filas de la matriz se cambia para que los elementos de una columna de la matriz estén en orden ascendente o descendente.
Si el orden se ha realizado satisfactoriamente, se devolverá 1; de lo contrario se devolverá –1.
Ejemplo
El ejemplo siguiente copia el campo contact
de la tabla customer
a una matriz denominada gaContact
. Se muestran los primeros 20 contactos de la matriz, se ordena la matriz y se vuelven a mostrar los contactos ordenados.
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\testdata')
USE Customer && Open customer table
COUNT TO gnCount && Number of contacts
DIMENSION gaContact(gnCount,1) && Create a contact array
COPY TO ARRAY gaContact FIELD contact && Fill the array
CLEAR
? 'Contact names:'
?
FOR nCount = 1 TO 20
? gaContact(nCount) && Display first 20 contacts
ENDFOR
= ASORT(gaContact) && Sort the array
?
? 'Sorted Contact names:'
?
FOR nCount = 1 TO 20
? gaContact(nCount) && Display first 20 contacts, sorted
ENDFOR
Vea también
ACOPY( ) | ADEL( ) | ADIR( ) | AELEMENT( ) | AFIELDS( ) | AINS( ) | ALEN( ) | ASCAN( )