Existe la función ASort que sirve para ordenar una matriz, pero solo de dimensión uno; requiero ordenar una matriz de 10*8, existe alguna función para esto, o deberé gastar un poco de neuronas haciendomela yo mismo.
Revisé el enlace y no se si ese ejemplo me pueda servir, ahí se esta relacionando dos matrices o yo no lo entiendo bien.
A ver si detallo mas lo mío; tengo una sola matriz con una logitud variable de filas, pero columnas son seis (la defino así aMatriz:={{},{},{},{},{},{}); cuando quiero ordenar me refiere a que se pongan de mayor a menor pero tomando como base a los elementos de la columna 1, mas o menos como un indexado pero sobre un solo campo, pero que al ordenar también mueva a la nueva posición a los elementos de las columnas 2 a 6 que estan relacionados con el dato de la columna 1. No se si lo explique bien, espero que si; en Excel es facil hacer esto con el comando ordenar.
Function Fn_ASort(_a,_n1,_AD) //a=Arreglo , n1=Columna a Ordenar , AD='A'Asc.'D'Desc.
Local _aAux,_n,_m,_x,bCondicion
If ValType(_n1)=
bCondicion:=_n1
Else
bCondicion:={||If(_AD='A',_a[_n1,_n]>_a[_n1,_m],_a[_n1,_n]<_a[_n1,_m])}
Endif
For _n=1 To Len(_a[1])
* Status('Ordenando elemento '+Str(Len(_a[1])-_n,10))
For _m=_n+1 To Len(_a[1])
If Eval(bCondicion,_n,_m)
For _x=1 To Len(_a)
_aAux:=_a[_x,_n] ; _a[_x,_n]:=_a[_x,_m] ; _a[_x,_m]:=_aAux
Next
Endif
Next
Next
Return Nil
Que bueno que te sirvio, la forma como defines los arreglos es como lo vengo trabajando de hace mucho tiempo
aqui te dejo una clase que te puede servir mucho, esto manipula los arreglos como si fuera una tabla/dbf
saludos
Francisco N.
Function TestArray()
Local oDatos
oDatos := tArray():New(5) // ARREGLO DE CINCO COLUMNAS
oDatos:Headers({"codigo","nombre","direccion","direccion_larga"})
Function Fn_ASort(matriz,columna,orden) // orden='A'Asc.'D'Desc.
Local _aAux,_n,_m,_x,bCondicion
If ValType(columna)=
bCondicion:=columna
Else
bCondicion:={||If(orden='A',matriz[columna,_n]>matriz[columna,_m],matriz[columna,_n]<matriz[columna,_m])}
Endif
For _n=1 To Len(matriz)
For _m=_n+1 To Len(matriz)
If matriz[_n]>matriz[_m]
For _x=1 To Len(matriz)
_aAux:=matriz[_n]
matriz[_n]:=matriz[_m]
matriz[_m]:=_aAux
Next
Endif
Next
Next
Return Nil