tincho   16-03-2023, 17:18
#1
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
Última modificación: 19-03-2023, 12:09 por tincho.

1 Saludo.
vuott   17-03-2023, 03:04
#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, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
tincho   17-03-2023, 09:48
#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.
Shell   18-03-2023, 11:36
#4
De la que hiciste, la transformé en dos.

Código:
Public Function CSortKey(c As Collection) As Collection
  ''Ordenar por la clave

  Dim aTmp As New String[]
  Dim cTemp As New Collection
  Dim sText As String
 
  For Each sText In c
    aTmp.Add(c.Key & "\t" & sText)
  Next
 
  aTmp.Sort(gb.Ascent)
 
  For Each sText In aTmp
    cTemp[Split(sText, "\t")[0]] = Split(sText, "\t")[1]
  Next
 
  Return cTemp
 
End

Public Function CSortValue(c As Collection) As Collection
  ''Ordenar por el valor      

  Dim aTmp As New String[]      
  Dim cTemp As New Collection
  Dim sText As String
 
  For Each sText In c
    aTmp.Add(sText & "\t" & c.Key)
  Next
 
  aTmp.Sort(gb.Ascent + gb.Language + gb.IgnoreCase)
 
  For Each sText In aTmp
    cTemp[Split(sText, "\t")[1]] = Split(sText, "\t")[0]
  Next
 
  Return cTemp
 
End

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 conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shordi   18-03-2023, 15:10
#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
Shell   18-03-2023, 16:49
#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
Última modificación: 18-03-2023, 17:57 por Shell.

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
  
Usuarios navegando en este tema: 5 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.