Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - compare tra stringhe
Forum - C# / VB.NET - compare tra stringhe

Avatar
microprocessore (Normal User)
Pro


Messaggi: 146
Iscritto: 18/06/2009

Segnala al moderatore
Postato alle 19:27
Mercoledì, 04/11/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.

PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1757
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 8:56
Giovedì, 05/11/2009
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?


PM Quote
Avatar
microprocessore (Normal User)
Pro


Messaggi: 146
Iscritto: 18/06/2009

Segnala al moderatore
Postato alle 16:44
Giovedì, 05/11/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.

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:20
Giovedì, 05/11/2009
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

  1. Module Module1
  2.  
  3. Structure Animale
  4.         Dim Razza As String
  5.         Dim Peso, Altezza As Single
  6.     End Structure
  7.  
  8.     Class AnimaleByRazzaComparer
  9.         Implements IComparer(Of Animale)
  10.  
  11.         Public Function Compare(ByVal x As Animale, ByVal y As Animale) As Integer Implements System.Collections.Generic.IComparer(Of Animale).Compare
  12.             Return x.Razza.CompareTo(y.Razza)
  13.         End Function
  14.     End Class
  15.  
  16.     Sub Main()
  17.         Dim Animali() As Animale
  18.         '...
  19.         Array.Sort(Animali, New AnimaleByRazzaComparer())
  20.     End Sub
  21.  
  22. End Module



Codice sorgente - presumibilmente C#

  1. static class Module1
  2. {
  3.  
  4. struct Animale
  5. {
  6.     public string Razza;
  7.     public float Peso;
  8.     public float Altezza;
  9. }
  10.  
  11. class AnimaleByRazzaComparer : IComparer<Animale>
  12. {
  13.    
  14.     public int Compare(Animale x, Animale y)
  15.     {
  16.         return x.Razza.CompareTo(y.Razza);
  17.     }
  18. }
  19.  
  20. public void Main()
  21. {
  22.     Animale[] Animali = null;
  23.     //...
  24.     Array.Sort(Animali, new AnimaleByRazzaComparer());
  25. }
  26. }




"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
microprocessore (Normal User)
Pro


Messaggi: 146
Iscritto: 18/06/2009

Segnala al moderatore
Postato alle 17:43
Giovedì, 05/11/2009
esiste una soluzione che non preveda la creazione di una classe?

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:45
Giovedì, 05/11/2009
Considerando che stai usando un linguaggio ad oggetti, la richiesta mi sembra alquanto sconfortante :rotfl:


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
microprocessore (Normal User)
Pro


Messaggi: 146
Iscritto: 18/06/2009

Segnala al moderatore
Postato alle 17:59
Giovedì, 05/11/2009
Codice sorgente - presumibilmente C# / VB.NET

  1. public void Main()
  2. {
  3.     Animale[] Animali = null;
  4.     //...
  5.     Array.Sort(Animali, new AnimaleByRazzaComparer());
  6. }
  7. }




animale è un nome ipotetico che hai dato all'array, giusto?

PM Quote
Avatar
Gianluca87 (Ex-Member)
Expert


Messaggi: 300
Iscritto: 16/11/2008

Segnala al moderatore
Postato alle 13:51
Venerdì, 06/11/2009
Testo quotato

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 il 06/11/2009 alle 13:52


a domanda precisa, risposta precisa...
a domanda generica, risposta generica...
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 20:48
Venerdì, 06/11/2009
Testo quotato

Postato originariamente da microprocessore:

Codice sorgente - presumibilmente C# / VB.NET

  1. public void Main()
  2. {
  3.     Animale[] Animali = null;
  4.     //...
  5.     Array.Sort(Animali, new AnimaleByRazzaComparer());
  6. }
  7. }




animale è un nome ipotetico che hai dato all'array, giusto?


Animali (plurale) è il nome della variabile; Animale (singolare) è il nome della struttura.

Anche con Linq andrebbe bene, ad è anche più conciso:
http://totem.altervista.org/guida/linq/A4.php


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote