Differenze tra le versioni di "Ordinare gli elementi di un vettore di Strutture in base ad un loro medesimo membro"
(Una versione intermedia di uno stesso utente non è mostrata) | |||
Riga 10: | Riga 10: | ||
− | + | Public Sub Main() | |
Dim st1, st2, st3 As New STRUTTURA | Dim st1, st2, st3 As New STRUTTURA | ||
Riga 18: | Riga 18: | ||
Dim bb As New Byte[3] | Dim bb As New Byte[3] | ||
− | <FONT color=gray>' ''Vengono assegnati i valori a ciascuna variabile di tipo della Struttura "STRUTTURA", | + | <FONT color=gray>' ''Vengono assegnati i valori a ciascuna variabile di tipo della Struttura "STRUTTURA", si assegna ogni variabile ad un elemento del vettore di tipo della Struttura "STRUTTURA":''</font> |
− | + | 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) | |
<FONT color=gray>' ''Passa il valore del membro oggetto dell'ordinamento ad un vettore di tipo omogeneo:''</font> | <FONT color=gray>' ''Passa il valore del membro oggetto dell'ordinamento ad un vettore di tipo omogeneo:''</font> | ||
− | + | For j = 0 To sstt.Max | |
− | + | bb[j] = sstt[j].a | |
− | + | Next | |
<FONT color=gray>' ''Effettua l'ordinamento (in questo caso di tipo "discendente"):''</font> | <FONT color=gray>' ''Effettua l'ordinamento (in questo caso di tipo "discendente"):''</font> | ||
− | + | bb.Sort(gb.Descent) | |
<FONT color=gray>' ''Genera un vettore di tipo della Struttura "ST" contenente nei propri elementi le variabili del tipo Struttura "ST" "ordinati" in base al membro ".a":''</font> | <FONT color=gray>' ''Genera un vettore di tipo della Struttura "ST" contenente nei propri elementi le variabili del tipo Struttura "ST" "ordinati" in base al membro ".a":''</font> | ||
− | + | For j = 0 To bb.Max | |
− | + | For k = 0 To sstt.Max | |
− | + | If bb[j] = sstt[k].a Then | |
− | + | With nova[j] = New STRUTTURA | |
− | + | .a = sstt[k].a | |
− | + | .b = sstt[k].b | |
− | + | End With | |
− | + | Endif | |
− | + | Next | |
− | + | Next | |
− | |||
<FONT color=gray>' ''Verifica del risultato:''</font> | <FONT color=gray>' ''Verifica del risultato:''</font> | ||
− | + | For j = 0 To nova.Max | |
− | + | With nova[j] | |
− | + | Print .a | |
− | + | Print .b | |
− | + | End With | |
− | + | Print | |
− | + | Next | |
− | + | End | |
− | |||
Mostriamo un altro esempio analogo, nel quale l'ordine dei nomi sarà adattato secondo l'ordine dei punteggi, corrispondente al membro di tipo ''Byte'' della Struttura: | Mostriamo un altro esempio analogo, nel quale l'ordine dei nomi sarà adattato secondo l'ordine dei punteggi, corrispondente al membro di tipo ''Byte'' della Struttura: | ||
Riga 78: | Riga 75: | ||
− | + | Public Sub Main() | |
Dim ri As STRUTTURA | Dim ri As STRUTTURA | ||
Riga 87: | Riga 84: | ||
Dim b, c As Byte | Dim b, c As Byte | ||
− | + | nomi = ["Aaaa", "Bbbb", "Cccc", "Dddd"] | |
− | + | punteggi = [15, 32, 18, 50] | |
− | + | For b = 0 To nomi.Max | |
− | + | ri = New STRUTTURA | |
− | + | ri.nome = nomi[b] | |
− | + | ri.punt = punteggi[b] | |
− | + | rrii.Push(ri) | |
− | + | Next | |
+ | |||
+ | With bb = New Byte[] | ||
+ | For b = 0 To rrii.Max | ||
+ | .Push(rrii[b].punt) | ||
+ | Next | ||
+ | .Sort(gb.Descent) | ||
+ | End With | ||
− | + | For b = 0 To bb.Max | |
− | + | For c = 0 To rrii.Max | |
− | + | If bb[b] = rrii[c].punt Then | |
− | + | With nuova[b] = New STRUTTURA | |
− | + | .nome = rrii[c].nome | |
− | + | .punt = rrii[c].punt | |
+ | End With | ||
+ | Endif | ||
+ | Next | ||
+ | Next | ||
− | + | For b = 0 To nuova.Max | |
− | + | Print nuova[b].punt, nuova[b].nome | |
− | + | Next | |
− | + | ||
− | + | End | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Versione attuale delle 04:17, 8 giu 2024
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, in questo codice 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 STRUTTURA a As Byte b As String End Struct Public Sub Main() Dim st1, st2, st3 As New STRUTTURA Dim sstt As New STRUTTURA[] Dim nova As New STRUTTURA[3] Dim j, k As Byte Dim bb As New Byte[3] ' Vengono assegnati i valori a ciascuna variabile di tipo della Struttura "STRUTTURA", si assegna ogni variabile ad un elemento del vettore di tipo della Struttura "STRUTTURA": 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 STRUTTURA .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
Mostriamo un altro esempio analogo, nel quale l'ordine dei nomi sarà adattato secondo l'ordine dei punteggi, corrispondente al membro di tipo Byte della Struttura:
Public Struct STRUTTURA nome As String punt As Byte End Struct Public Sub Main() Dim ri As STRUTTURA Dim rrii As New STRUTTURA[] Dim nuova As New STRUTTURA[4] Dim nomi As String[] Dim punteggi, bb As Byte[] Dim b, c As Byte nomi = ["Aaaa", "Bbbb", "Cccc", "Dddd"] punteggi = [15, 32, 18, 50] For b = 0 To nomi.Max ri = New STRUTTURA ri.nome = nomi[b] ri.punt = punteggi[b] rrii.Push(ri) Next With bb = New Byte[] For b = 0 To rrii.Max .Push(rrii[b].punt) Next .Sort(gb.Descent) End With For b = 0 To bb.Max For c = 0 To rrii.Max If bb[b] = rrii[c].punt Then With nuova[b] = New STRUTTURA .nome = rrii[c].nome .punt = rrii[c].punt End With Endif Next Next For b = 0 To nuova.Max Print nuova[b].punt, nuova[b].nome Next End