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

Da Gambas-it.org - Wikipedia.

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