Visual Basic - ORDENAR UNA MATRIZ

Life is soft - evento anual de software empresarial
 
Vista:

ORDENAR UNA MATRIZ

Publicado por Mari Carmen (4 intervenciones) el 15/11/2006 13:06:21
Tengo una matriz de 5 columnas por n filas. Necesito una funcion que ordene por una columna concreta, la segunda, que es un código alfanumerico de la siguiente manera
kt.arba.b, am.a19.bl
Como se puede hacer?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:ORDENAR UNA MATRIZ

Publicado por ricaurtem (313 intervenciones) el 15/11/2006 13:32:42
Como forma mas practica, ya que son alfanumericos, te recomiendo, carga la columna qu e queires en un Listbox (que este oculto) y ponle la propiedad Sorted=True (para que te lo ordene) y luego lo pasas a la matriz (columna) nuevamente. Practico y funcional, ya que el codigo para ordenar es uffffffff odisea.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ORDENAR UNA MATRIZ

Publicado por Skatu (8 intervenciones) el 21/11/2006 19:49:26
Hola que tal.
Este código ordena de forma ascendente o descendente una matriz que está guardado en memoria en función de la columna deseada. Hay que llamar a la función enviandole como dato el número de columna, para ti sería del 0 (que sería la primera columna) al 4 (última). Pero funcionaría para cualquier nº de columnas.

Public Sub Ordenar(Columna As Byte)
Dim K As Byte
Dim T As Byte
Dim I As Byte
For T = 0 To UBound(A, 1)
For I = 0 To UBound(A, 1) - 1
If LCase(A(I, Columna)) > LCase(A(I + 1, Columna)) Then
If Ascendente = True Then CambiarOrden (I)
ElseIf LCase(A(I, Columna)) < LCase(A(I + 1, Columna)) Then
If Ascendente = False Then CambiarOrden (I)
End If
Next I
Next T
End Sub

Public Sub CambiarOrden(Fila As Byte)
Dim K As Byte
For K = 0 To UBound(A, 2)
TemP(K) = A(Fila, K)
A(Fila, K) = A(Fila + 1, K)
A(Fila + 1, K) = TemP(K)
Next K
End Sub

Si necesitas que te explique el código lo haré, pero no es muy difícil de entenderlo (eso creo, je, je, je)
Espero que te sirva, aunque supongo que te he respondido muy tarde
Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

RE:ORDENAR UNA MATRIZ

Publicado por Skatu (8 intervenciones) el 21/11/2006 19:54:18
Hola que tal.
Este código ordena de forma ascendente o descendente una matriz que está guardado en memoria en función de la columna deseada. Hay que llamar a la función enviandole como dato el número de columna, para ti sería del 0 (que sería la primera columna) al 4 (última). Pero funcionaría para cualquier nº de columnas.

Public Sub Ordenar(Columna As Byte)
Dim K As Byte
Dim T As Byte
Dim I As Byte
For T = 0 To UBound(A, 1)
For I = 0 To UBound(A, 1) - 1
If LCase(A(I, Columna)) > LCase(A(I + 1, Columna)) Then
If Ascendente = True Then CambiarOrden (I)
ElseIf LCase(A(I, Columna)) < LCase(A(I + 1, Columna)) Then
If Ascendente = False Then CambiarOrden (I)
End If
Next I
Next T
End Sub

Public Sub CambiarOrden(Fila As Byte)
Dim K As Byte
For K = 0 To UBound(A, 2)
TemP(K) = A(Fila, K)
A(Fila, K) = A(Fila + 1, K)
A(Fila + 1, K) = TemP(K)
Next K
End Sub

Si necesitas que te explique el código lo haré, pero no es muy difícil de entenderlo (eso creo, je, je, je)
Espero que te sirva, aunque supongo que te he respondido muy tarde
Un saludo

Je, je, je
Se me olvidaba decirte que:
A(NºFilas,NºColumnas) es una matriz
Temp(NºColumnas) es otra matriz
Si se tetrada de caráctes alfanumericos serán d tipo String
Ascendente es de tipo booleano
Estas variables las he declarado en el Option explicit

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar