Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

[SOLUCIONADO]  Ordenar una coleccion de acuerdo a los valores.
#1
Bug 

Hola amigos.
Alguien sabría decir si existe una manera de ordenar una colección de acuerdo a sus valores, por ejemplo:

["perro"]=-3
["elefante"]=-2
["gato"]=1
["loro"]=-4
["hipopótamo"]=-2

La idea es ordenar de acuerdo el numero por ejemplo que quede así:

["loro"]=-4
["perro"]=-3
["elefante"]=-2
["hipopótamo"]=-2
["gato"]=1

1 Saludo.
    ¡Gracias!
#2

Una vez escribiste este tema. No sé si te servirá de algo.

https://gambas-es.org/showthread.php?tid=1011

"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)

"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
    ¡Gracias!
#3

(17-03-2023, 03:04)vuott escribió:  Una vez escribiste este tema. No sé si te servirá de algo.

Gracias Vuott, había olvidado que escribí sobre este tema, pero de momento me sirve.

1 Saludo.
    ¡Gracias!
#4

De la que hiciste, la transformé en dos.

GAMBAS
  1.   ''Ordenar por la clave
  2.  
  3.   Dim aTmp As New String[]
  4.   Dim cTemp As New Collection
  5.   Dim sText As String
  6.  
  7.   For Each sText In c
  8.     aTmp.Add(c.Key & "\t" & sText)
  9.   Next
  10.  
  11.   aTmp.Sort(gb.Ascent)
  12.  
  13.   For Each sText In aTmp
  14.     cTemp[Split(sText, "\t")[0]] = Split(sText, "\t")[1]
  15.   Next
  16.  
  17.   Return cTemp
  18.  
  19.  
  20.   ''Ordenar por el valor      
  21.  
  22.   Dim aTmp As New String[]      
  23.   Dim cTemp As New Collection
  24.   Dim sText As String
  25.  
  26.   For Each sText In c
  27.     aTmp.Add(sText & "\t" & c.Key)
  28.   Next
  29.  
  30.   aTmp.Sort(gb.Ascent + gb.Language + gb.IgnoreCase)
  31.  
  32.   For Each sText In aTmp
  33.     cTemp[Split(sText, "\t")[1]] = Split(sText, "\t")[0]
  34.   Next
  35.  
  36.   Return cTemp
  37.  



Supongo que según donde lo apliques, ordenar una colección tiene su interés.
Como su búsqueda es por la clave, siempre será más rápido que un array.

Pero desde luego tienes un problema, que no se pueden repetir las claves.

Saludos

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!
#5

Cita:Como su búsqueda es por la clave, siempre será más rápido que un array.
En mi experiencia no. Los arrays son más rápidos siempre.


Saludos

No podemos regresar
    ¡Gracias!
#6

(18-03-2023, 15:10)Shordi escribió:  En mi experiencia no. Los arrays son más rápidos siempre.

Seria interesante ver un buen ejemplo. Wink
Supongo que necesitaríamos una cantidad de datos razonables.

Tomado de un articulo que encontré de Java ( que probablemente guarda una similitud). Se compara los arrays con las colecciones.
Habla de arrays estáticos, que tienen un tamaño definido, lo contrarío que las colecciones que son dinámicas.

En Java existe otro tipo de arrays que no son estáticos.

En cuanto a rendimiento:
 
Cita:Las operaciones de recuperación y asignación en una array toman un tiempo constante. Sin embargo, una array no admite la operación de inserción
ya que su longitud se fija después de la creación.

Todas las Colecciones en Java facilitan las operaciones de recuperación, asignación e inserción. El tiempo que toman estas operaciones depende de
la estructura de datos subyacente. Pero sin duda, las arrays ofrecen un mejor rendimiento que las colecciones.

En cuanto a los tipos que almacena:
 
Cita: 
Las arrays en Java pueden contener tipos de datos primitivos (int, char, long, float, double, boolean, etc.) y objetos Java (Integer, Character, Long, Float, Double, Boolean, String, etc.). Por el contrario, una colección puede contener elementos primitivos. Wrapper clases y objetos.

En cuanto al almacenamiento:
 
Cita: 
Los arrays toman O(n) espacio para n número de elementos y no reservar ningún almacenamiento adicional. Por el contrario, la mayoría de las Colecciones reservan algo de almacenamiento adicional para nuevos elementos, y el espacio real que ocupan los contenidos depende de la implementación.

En cuanto a las dimensiones:
 
Cita: 
La dimensión de una arrays es el número total de índices necesarios para seleccionar un elemento. Las arrays en Java admiten arrays unidimensionales y multidimensionales, mientras que una colección no tiene concepto de dimensiones. Sin embargo, podemos crear fácilmente Colecciones anidadas.

Probablemente encontremos ejemplos en un lenguaje más similar a Gambas como es Visual Basic que se pueda comprobar este tema.

 En cuanto a que sea más rápido te refieres a los array estáticos, no los dinámicos, supongo.
 Ya sabes lo malo que tiene el estático, que tienes que saber las dimensiones de antemano.

Saludos

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)