|
Página 1 de 1
|
Ordenar Una Matriz De Dos Dimensiones [SOLUCIONADO]
Autor |
Mensaje |
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Ordenar Una Matriz De Dos Dimensiones [SOLUCIONADO]
Tengo que ordenar unos datos que guardo en una matriz de dos dimensiones.
Es un variant[] que contiene una serie de string[]
La ordenación puede ser por cualquiera de los elementos de los String[]
¿Alguien tiene alguna rutina preestablecida o tengo que reinventar la rueda otra vez?
Saludos
última edición por shordi el Miercoles, 03 Abril 2013, 10:30; editado 1 vez
|
#1 Miercoles, 03 Abril 2013, 08:34 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Ordenar Una Matriz De Dos Dimensiones
Shordi:
Mirate este enlace, a lo mejor te da alguna idea de como lo puedes hacer:
http://foro.gambas-es.org/viewtopic...ghlight=compare
Saludos
Nota:
Aqui hay otro ejemplo (es más simple): http://cursogambas.blogspot.com.es/...emove-find.html
última edición por jsbsan el Miercoles, 03 Abril 2013, 09:19; editado 1 vez
|
#2 Miercoles, 03 Abril 2013, 09:07 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Ordenar Una Matriz De Dos Dimensiones
Añadiendo un poco mas:
Lo suyo es que tuvieses una propiedad que indicara el campo a ordenar (o indice del array string[], por el que quieres ordenar), y en el método compare, le ponca un select case, que segun el valor de ese indice, haga la comparacion....
|
#3 Miercoles, 03 Abril 2013, 09:23 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Ordenar Una Matriz De Dos Dimensiones
Gracias Julio, me apunto tu solución para futuras referencias pero, de momento, y dadas las prisas que llevo con ésto, he hecho una pequeña función que soluciona el problema... soslayándolo.
No es elegante, pero funciona. Sólo para un array de string[], de momento.
Los pasos son:
1.-Añado al inicio de cada elemento string[] la columna a ordenar.
2.-Convierto el string[] en una cadena separando con "~"
3.-Ordeno esa cadena según el método de ordenación pasado.
4.-Recreo el string[] original eliminado la primera columna (la que añadí en el paso 1)
Public Sub ordenar(ar As Variant[], elemento As Integer, Optional modo As Integer) As Variant[]
Dim linea, lineas As String[]
Dim aRetorno As New Variant[]
Dim cad As String
If Not modo Then modo = gb.Ascent 'modo ascendente por defecto
lineas = New String[]
For Each linea In ar 'recorro el variant[] original
linea.Add(linea[elemento], 0) 'inserto en primera posición la columna por la que quiero ordenar
cad = linea.Join("~") 'uno todos los elementos en una cadena
lineas.Add(cad) 'añado esa cadena al string[] lineas
Next
lineas.Sort(modo) 'ordeno
For Each cad In lineas
linea = Split(cad, "~") 'vuelvo a dividir la cadena en un string[]
linea.extract(0) 'Elimino el primer elemento usado para ordenar
aRetorno.Add(linea) 'añado el string[] al variant
Next
Return aRetorno 'retorno el variant reordenado
End
El contexto en el que lo estoy utilizando es en un gridview que muestra el contenido de un Array de dos dimensiones. El evento Column_Click ordena el gridView ascendente o descendente. Ya subiré un ejemplo cuando vaya más tranquilo.
Cambio el título a Solucionado.
Saludos
|
#4 Miercoles, 03 Abril 2013, 10:29 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Ordenar Una Matriz De Dos Dimensiones [SOLUCIONADO]
Shordi:
Citar: 1.-Añado al inicio de cada elemento string[] la columna a ordenar.
2.-Convierto el string[] en una cadena separando con "~"
3.-Ordeno esa cadena según el método de ordenación pasado.
4.-Recreo el string[] original eliminado la primera columna (la que añadí en el paso 1)
Esta curioso el método.... me lo apunto.
Saludos
|
#5 Miercoles, 03 Abril 2013, 12:32 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Ordenar Una Matriz De Dos Dimensiones [SOLUCIONADO]
No me era suficiente para lo que quiero que sólo ordenase string[]. He tenido que modificarlo para que también lo haga si hay algún elemento numérico.
Así queda:
Public Sub ordenarA2D(ar As Variant[], elemento As Integer, Optional modo As Integer) As Variant[]
Dim linea As Variant[]
Dim clinea, lineas As String[]
Dim aRet As New Variant[]
Dim cad As String
Dim n, i As Integer
aret = ar.Copy()
If Not modo Then modo = gb.Ascent
lineas = New String[]
For Each linea In aret
clinea = New String[]
clinea.Add(IIf(TypeOf(linea[elemento]) = gb.String, linea[elemento], Right(String(12, "0") & CString(linea[elemento]), 12)), 0)
For n = 0 To linea.count - 1
clinea.Add(IIf(TypeOf(linea[n]) = gb.String, linea[n], CString(linea[n])))
Next
cad = clinea.Join("~")
lineas.Add(cad)
Next
lineas.Sort(modo)
For i = 0 To lineas.count - 1
linea = Split(lineas[i], "~")
linea.extract(0)
For n = 0 To linea.count - 1
aRet[i][n] = IIf(TypeOf(aRet[i][n]) = gb.String, linea[n], Val(linea[n]))
Next
Next
Return aRet
End
Como veis el sistema es el mismo, tan sólo que si el elemento a ordenar es numérico, se convierte a una cadena de 12 caracteres cuadrada con ceros a la izquierda, para que la ordenación sea válida como número.
Sigue siendo una chapuza... pero funciona.
última edición por shordi el Miercoles, 03 Abril 2013, 19:42; editado 1 vez
|
#6 Miercoles, 03 Abril 2013, 19:41 |
|
|
|
Temas parecidos
Temas parecidos
Tema |
Autor |
Foro |
Respuestas |
último mensaje |
|
Cadena A Matriz [SOLUCIONADO]
|
skhaliburg |
General |
3 |
Sabado, 25 Septiembre 2010, 19:06 jsbsan |
|
Matriz, Array, Structure?¿?¿? No Sé Lo ...
|
razaAztk |
General |
9 |
Lunes, 14 Marzo 2011, 09:33 shordi |
|
El Ejemplo Definitivo De Matriz, Array, Ar...
|
tincho |
Aplicaciones/Fragmentos de Código |
7 |
Martes, 10 Enero 2017, 19:47 tincho |
|
Como Ordenar Un Array De Objetos De Difere...
|
tercoIDE |
General |
1 |
Martes, 21 Abril 2020, 23:02 tercoIDE |
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|