
microprocessore (Normal User)
Pro
    
Messaggi: 146
Iscritto: 18/06/2009
|
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.
|
|

Thejuster (Admin)
Guru^2
    
Messaggi: 2338
Iscritto: 04/05/2008
|
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?
|
|

microprocessore (Normal User)
Pro
    
Messaggi: 146
Iscritto: 18/06/2009
|
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.
|
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
Devi creare una classe che implementi l'interfaccia IComparer. Ammettendo che la tua struttura si chiami Animale, una cosa del genere:
Codice sorgente - presumibilmente VB.NET |
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
|
Codice sorgente - presumibilmente C# |
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 ());} }
|
|
|

microprocessore (Normal User)
Pro
    
Messaggi: 146
Iscritto: 18/06/2009
|
esiste una soluzione che non preveda la creazione di una classe?
|
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
Considerando che stai usando un linguaggio ad oggetti, la richiesta mi sembra alquanto sconfortante
|
|

microprocessore (Normal User)
Pro
    
Messaggi: 146
Iscritto: 18/06/2009
|
Codice sorgente - presumibilmente C# / VB.NET |
public void Main()
{
Animale[] Animali = null;
//...
Array.Sort(Animali, new AnimaleByRazzaComparer());
}
}
|
animale è un nome ipotetico che hai dato all'array, giusto?
|
|

Gianluca87 (Ex-Member)
Expert
    
Messaggi: 300
Iscritto: 16/11/2008
|
Postato originariamente da Il Totem:
Considerando che stai usando un linguaggio ad oggetti, la richiesta mi sembra alquanto sconfortante |
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 il 06/11/2009 alle 13:52 |
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
Postato originariamente da microprocessore:
Codice sorgente - presumibilmente C# / VB.NET |
public void Main()
{
Animale[] Animali = null;
//...
Array.Sort(Animali, new AnimaleByRazzaComparer());
}
}
|
animale è un nome ipotetico che hai dato all'array, giusto? |
|
|