Ordinare gli elementi di un vettore di Strutture in base ad un loro medesimo membro

Da Gambas-it.org - Wikipedia.
Versione del 9 lug 2014 alle 19:14 di Vuott (Discussione | contributi) (Creata pagina con 'Il caso è quello in cui, dopo aver assegnato ad un vettore di tipo ''Struttura'' due o più variabili del tipo di quella ''Struttura'', si procede ad effettuare un ordinament...')

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

Il caso è quello in cui, dopo aver assegnato ad un vettore di tipo Struttura due o più variabili del tipo di quella Struttura, si procede ad effettuare un ordinamento all'interno di quel vettore sulla base di un medesimo membro delle predette variabili di tipo Struttura assegnate agli elementi del vettore.


Mostriamo di seguito un possibile codice, nel quale si procederà successivamente all'ordinamento in modalità discendente in base al primo membro della Struttura modello, che risulta essere di tipo Byte. L'ordinamento, in vero, non consiste in una riorganizzazione degli elementi originari del vettore di tipo Struttura, ma avviene in modo indiretto assegnando ad un nuovo vettore del tipo della Struttura utilizzata le variabili di tipo Struttura originarie, dopo aver individuato in modo discendente di ciascuna il rispettivo valore del primo membro:

Public Struct ST
  a As Byte
  b As String
End Struct


Public Sub Main()

 Dim st1, st2, st3 As New ST
 Dim sstt As New ST[]
 Dim nova As New ST[3]
 Dim j, k As Byte
 Dim bb As New Byte[3]
 
' Vengono assegnati i valori a ciascuna variabile di tipo della Struttura "ST",
' si assegna ogni variabile ad un elemento del vettore di tipo della Struttura "ST":
  With st1
    .a = 0
    .b = "st1"
  End With
  sstt.Add(st1)

  With st2
    .a = 5
    .b = "st2"
  End With
  sstt.Add(st2)

  With st3
    .a = 3
    .b = "st3"
  End With
  sstt.Add(st3)

' Passa il valore del membro oggetto dell'ordinamento ad un vettore di tipo omogeneo:
   For j = 0 To sstt.Max
     bb[j] = sstt[j].a
   Next
   
' Effettua l'ordinamento (in questo caso di tipo "discendente"):
   bb.Sort(gb.Descent)
   
' Genera un vettore di tipo della Struttura "ST" contenente nei propri elementi le variabili del tipo Struttura "ST" "ordinati" in base al membro ".a":
   For j = 0 To bb.Max
     For k = 0 To sstt.Max
       If bb[j] = sstt[k].a Then
         With nova[j] = New ST
           .a = sstt[k].a
           .b = sstt[k].b
         End With
       Endif
     Next
   Next
   

' Verifica del risultato:
   For j = 0 To nova.Max
     With nova[j]
       Print .a
       Print .b
     End With
     Print
   Next
       
End