Oppure

Loading
04/11/09 18:27
microprocessore
ho un problema con un codice di c#.
devo ordinare un vettore di tipo struct che ha 3 campi:razza, peso e altezza.
devo ordinarlo in ordine alfabetico secondo il campo razza... mi spiego meglio se in razza scrivo tigre per la 1° cella e per la 2° scrivo leone mi deve scambiare le celle con i relativi pesi e altezza.
so che si deve usare una variabile temporanea (o d'appoggio), il problema vero e proprio e nel assegnare a questa variabile di tipo string uno delle due stringhe.
so che si deve usare Compare, ma non so come devo implementarlo.
aaa
05/11/09 7:56
Thejuster
cioè vuoi che in una cella hai un campo con un valore all'interno
scritto "leone"
e devi sostituirlo con un valore che si trova in una struttura?
mire.forumfree.it/ - Mire Engine
C# UI Designer
05/11/09 15:44
microprocessore
sarò più chiaro...
io ho un vettore di tipo esemplari (è il nome che ho dato alla struttura).
esemplari ha i seguenti campi: public string razza, public float[]peso e public float[] altezza.

l'utente caricherà il vettore, e una volta terminato il caricamento, voglio che il vettore venga ordinato alfabeticamente secondo i valori di razza in ogni cella del vettore esemplari.
aaa
05/11/09 16:20
Il Totem
Devi creare una classe che implementi l'interfaccia IComparer. Ammettendo che la tua struttura si chiami Animale, una cosa del genere:
Module Module1

Structure Animale
        Dim Razza As String
        Dim Peso, Altezza As Single
    End Structure

    Class AnimaleByRazzaComparer
        Implements IComparer(Of Animale)

        Public Function Compare(ByVal x As Animale, ByVal y As Animale) As Integer Implements System.Collections.Generic.IComparer(Of Animale).Compare
            Return x.Razza.CompareTo(y.Razza)
        End Function
    End Class

    Sub Main()
        Dim Animali() As Animale
        '...
        Array.Sort(Animali, New AnimaleByRazzaComparer())
    End Sub

End Module


static class Module1
{

struct Animale
{
    public string Razza;
    public float Peso;
    public float Altezza;
}

class AnimaleByRazzaComparer : IComparer<Animale>
{
    
    public int Compare(Animale x, Animale y)
    {
        return x.Razza.CompareTo(y.Razza);
    }
}

public void Main()
{
    Animale[] Animali = null;
    //...
    Array.Sort(Animali, new AnimaleByRazzaComparer());
}
}

aaa
05/11/09 16:43
microprocessore
esiste una soluzione che non preveda la creazione di una classe?
aaa
05/11/09 16:45
Il Totem
Considerando che stai usando un linguaggio ad oggetti, la richiesta mi sembra alquanto sconfortante :rotfl:
aaa
05/11/09 16:59
microprocessore
public void Main()
{
    Animale[] Animali = null;
    //...
    Array.Sort(Animali, new AnimaleByRazzaComparer());
}
}



animale è un nome ipotetico che hai dato all'array, giusto?
aaa
06/11/09 12:51
Gianluca87
Postato originariamente da Il Totem:

Considerando che stai usando un linguaggio ad oggetti, la richiesta mi sembra alquanto sconfortante :rotfl:

:rotfl:
la best practices per fare ciò che chiedi è fare una classe di animale che rappresenta il tuo animale e poi fare una lista di animali tipo List<Animale>... con linq to object fai tutte le manipolazioni che vuoi sulla tua lista
Ultima modifica effettuata da Gianluca87 06/11/09 12:52
aaa