Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. 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 (Admin)
Guru^2


Messaggi: 2297
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?


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
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. }



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:

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
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

PM Quote