Newsgroup: it.comp.lang.visual-basic
Titolo: Aiuto!!!

In un giochino che ho creato devo inserire una classifica ed ordinarla in
base ai punteggi ma non so come fare.
Io ho registrato i nomi dei giocatori in un array ed i punteggi in un altro
Dim Nome(1 To 10) As String
Dim Punti(1 To 10) As Integer
Poi ho attribuito a Nome(n) il nome di un giocatore il cui punteggio
corrisponde a Punti(n)
Successivamente inserisco gli elementi dell'array Punti in una listbox (e
faccio la stessa cosa per quelli di Nome) e, impostando la proprietà Sorted
su true, li ordino in modo crescente.
Però mi trovo in difficolta nell'ordinare i nomi in base al punteggio
ovvero, dopo aver ordinato il punteggio, oviamente i nomi non corrispondono
più: Nome(n) non corrisponde più con Punti(n) (risulterebbe che un giocatore
avrebbe il punteggio di un altro).
(Scusate la prolissità)
Ora vorrei sapere come posso fare per ordinare gli elementi di Punti in
ordine crescente mantenendo la relazione con Nome che c'era prima
dell'ordinamento.
Mi spiego meglio:
dopo aver attribuito i nomi ed i punti Nome(1) corrisponde con Punti(1)
ovvero il giocatore inserito in Nome(1) ha fatto il punteggio registrato in
Punti(1); ma dopo l'ordinamento questa relazione non c'è più.
Grazie a tutti coloro che mi aiuteranno!!!!
Ghigo    :-)
P.S.    Magari c'è il modo di creare una ListBox con due colonne ed
ordinarle con la proprietà Sorted (o in altri modi) in base ad una colonna
(come ad es. una tabella di Excel) ?

 wrote in message
6b_N4.46095$xt2.5...@news.infostrada.it...


Un metodo macchinoso per ordinare un array..... prova ad usare un paio di
funzioncine un po più organiche del tipo QuickSort, ShellSort, BubbleSort
ecc...
Qui di seguito trovi il codice per il QuickSort, ovviamente gestisce un solo
array, non è difficile modificarlo per gestire più array....adesso che ci
penso, potresti usare un array bidimensionale della serie
Dim Classifica(1 to 100, 1 to 100) As Variant 'Occhio ai punteggi, devi
formattarli con Format(Num,"000000") altrimenti troveresti 1,11,2,3,4 ecc.
(ordinemento di stringhe)
Public Sub xQuickSort(avarIn() As Variant, ByVal intLowBound As Long, ByVal
intHighBound As Long)
Dim intX As Long
Dim intY As Long
Dim varMidBound As Variant
Dim varTmp As Variant
On Error GoTo PROC_ERR
' Se questi sono i dati da ordinare
If intHighBound > intLowBound Then
    ' Calcola il valore degli elementi mediani
    varMidBound = avarIn((intLowBound + intHighBound) \ 2)
    intX = intLowBound
    intY = intHighBound
    Do While intX <= intY
        If avarIn(intX) >= varMidBound And avarIn(intY) <= varMidBound Then
            varTmp = avarIn(intX)
            avarIn(intX) = avarIn(intY)
            avarIn(intY) = varTmp
            intX = intX + 1
            intY = intY - 1
        Else
            If avarIn(intX) < varMidBound Then
                intX = intX + 1
            End If
            If avarIn(intY) > varMidBound Then
                intY = intY - 1
            End If
        End If
    Loop
    'Ordina gli elementi bassi a metà dell'array
    xQuickSort avarIn(), intLowBound, intY
    'Ordina gli elementi bassi a metà dell'array
    xQuickSort avarIn(), intX, intHighBound
End If
PROC_EXIT:
Exit Sub
PROC_ERR:
MsgBox "Error: " & Err.Number & ". " & Err.Description, , _
"QuickSortVariantArray"
Resume PROC_EXIT
End Sub
Dopo che li hai ordinati mettili dentro alle list box
----------
ciao
Sabba

Grazie a tutti coloro che mi aiuteranno!!!!
Anzichè un array ti devi servire di un Type:
Type TScore
    Name As String
    Points As Integer
End Type
Dim Score(1 To 10) As TScore
in questo modo 1) elimini la gestione di un array parallelo (che è sempre un
disastro), 2) non hai più il problema di allineare continuamente a mano gli
elementi dei due array.
Ciao