Ordinare gli elementi dei membri vettoriali di una Struttura in base ad uno di loro

Da Gambas-it.org - Wikipedia.
Versione del 8 giu 2024 alle 04:19 di Vuott (Discussione | contributi)

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Il caso in questione è qello in cui:

  • si ha una Struttura, i cui membri sono dei vettori;
  • ogni elemento di un membro vettoriale è in stretta rapporto con l'elemento di un altro membro;
  • si intende ordinare gli elementi di ciascun membro, conservando ovviamente quello stretto legame.

Mostriamo un esempio pratico, nel quale, avendo una Struttura composta da due membri di tipo array in cui l'elemento dell'uno è correlato ad un elemento dell'altro membro, si intende ordinare gli elementi ovviamnete di entrambi i membri sulla base del membro vettoriale di tipo Byte:

Public Struct RISULTATI
  nome[4] As String
  punt[4] As Byte
End Struct


Public Sub Main()
 
 Dim ri, nuova As New RISULTATI
 Dim nomi As String[]
 Dim punteggi, bb As Byte[]
 Dim b, c As Byte
  
' Imposta i valori iniziali per entrambi gli array:
 nomi = ["Aaaa", "Bbbb", "Cccc", "Dddd"]
 punteggi = [15, 32, 18, 50]
 For b = 0 To nomi.Max
   ri.nome[b] = nomi[b]
   ri.punt[b] = punteggi[b]
 Next
  
' Passa il valore del membro oggetto dell'ordinamento ad un vettore di tipo omogeneo, che fa così da appoggio:
 With bb = New Byte[]
   For b = 0 To ri.nome.Max
     .Push(ri.punt[b])
   Next
   .Sort(gb.Descent)
 End With
  
' Genera un nuovo vettore di tipo della Struttura "RISULTATI" contenente nei propri elementi le variabili del tipo Struttura "RISULTATI", "ordinati" in base al membro ".punt":
 For b = 0 To bb.Max
   For c = 0 To bb.Max
     If bb[b] = ri.punt[c] Then
       With nuova 
         .nome[b] = ri.nome[c]
         .punt[b] = ri.punt[c]
       End With
     Endif
   Next
 Next
    
' Verifica finale:
 For b = 0 To nuova.nome.Max
   Print nuova.punt[b], nuova.nome[b]
 Next
  
End