Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C#] Ordinare una ArrayList....

    Salve,
    in una ArrayList ho insrtito delle Istanze di una mia Classe,
    vorrei potere ordinale l'ArrayList per l'item id (int) che risiede nella mia Istanza....

    codice:
    class Row
    {
       private int m_id;
       private string m_label;
    
       public Row(int id, string label)
       {
          m_id = id;
          m_label = label;
       }
    
       public int id()
       {
          return m_id;
       }
    
       public string label()
       {
          return m_label;
       }
    }
    
    
    ArrayList aRowsExcel = new ArrayList();
    
    for (int i=0; i<=10; i++)
    {
       aRowsExcel.Add(new Row(i, "bla-bla");
    }
    
    aRowsExcel.sort();//non mi controlla il campo che volgio ordinare
    come posso fare per ordinare per id ???

  2. #2
    nella tua classe devi implementare l'interfaccia IComparable e definire la logica di comparazione fra 2 oggetti della tua classe, solo in questo modo Sort() saprà come considerare 2 oggetti Row uno minore dell'altro.

    la tua classe diventa quindi:
    codice:
    	class Row: IComparable
    	{
    		private int m_id;
    		private string m_label;
    
    		public Row(int id, string label)
    		{
    			m_id = id;
    			m_label = label;
    		}
    
    		public int id()
    		{
    			return m_id;
    		}
    
    		public string label()
    		{
    			return m_label;
    		}
    
    		#region Membri di IComparable
    
    		public int CompareTo(object obj)
    		{
    			if(m_id == ((Row)obj).m_id) //this è uguale a obj, ritorno 0
    				return 0;
    
    			if(m_id > ((Row)obj).m_id) //this è maggiore di obj, ritorno un positivo
    				return 1;
    
    			return -1; //this è minore di obj, ritorno un negativo
    		}
    
    		#endregion
    	}
    ora potrai fare il Sort()

  3. #3

    overload > e <

    Ciao ho provato c'è un modo di fare l'overload di qualche interfaccia in modo che si possa usare un confronto tipo " < " oppure " > " su delle variabili di tipo object ?

    Ho fatto una prova di un overload in questo modo:
    codice:
    public class CartaTest : IComparable<CartaTest>
        {
            private string valoreCarta;
            private string semeCarta;
            List<string> listaSemiCarte = new List<string>();
            List<string> listaValoriCarte = new List<string>();
    
            // Costruttore
            public CartaTest(string val, string seme) 
            {
                valoreCarta = val;
                semeCarta = seme;
                
                listaSemiCarte.Add("Denari");
                listaSemiCarte.Add("Coppe");
                listaSemiCarte.Add("Spade");
                listaSemiCarte.Add("Bastoni");
    
                listaValoriCarte.Add("Asso");
                listaValoriCarte.Add("Due");
                listaValoriCarte.Add("Tre");
                listaValoriCarte.Add("Quattro");
                listaValoriCarte.Add("Cinque");
                listaValoriCarte.Add("Sei");
                listaValoriCarte.Add("Sette");
                listaValoriCarte.Add("Otto");
                listaValoriCarte.Add("Nove");
                listaValoriCarte.Add("Dieci");
    
            }
    
            public int CompareTo(CartaTest altro)
            {
                if (this.listaValoriCarte.IndexOf(valoreCarta) > altro.listaValoriCarte.IndexOf(altro.valoreCarta))
                    return 1;
                else if (this.listaValoriCarte.IndexOf(valoreCarta) < altro.listaValoriCarte.IndexOf(altro.valoreCarta))
                    return -1;
                else
                    return 0;
    
            }
    
            public string getValore()
            {
                return valoreCarta;
            }
    
            public string getSeme()
            {
                return semeCarta;
            }
        }
    Mi funziona col metodo CompareTo ma se provo a fare un confronto " < " mi dice che non si puo fare con variabili di tipo object.

    C'è un modo o non si puo'.
    Grazie dell'attenzione.
    Ciao
    un uomo senza panza e come un cielo senza stelle ...mio tris ...

  4. #4
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    Devi vedere l'overloading degli operatori
    http://lmgtfy.com/?q=operator+overloading+in+c%23
    I got the remedy

  5. #5
    Grazie per l'attenzione, ho provato:

    codice:
    public static Carta operator <(Carta questa, Carta quella)
            {
                if(questa.listaValoriCarte.IndexOf(questa.valoreCarta) > quella.listaValoriCarte.IndexOf(quella.valoreCarta))
                    return true;
                else if (questa.listaValoriCarte.IndexOf(questa.valoreCarta) < quella.listaValoriCarte.IndexOf(quella.valoreCarta))
                    return false;
            }
    ma mi dice che : " impossibile convertire implicitamente il tipo 'bool'



    Grazie , ciao
    un uomo senza panza e come un cielo senza stelle ...mio tris ...

  6. #6
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    devi capire da solo l'errore, è banalissimo ma forse ti sfugge
    I got the remedy

  7. #7
    hai ragione era banalissimo l'errore adesso sono contento:
    codice:
            public static bool operator <(Carta questa, Carta quella)
            {
                if(questa.listaValoriCarte.IndexOf(questa.valoreCarta) > quella.listaValoriCarte.IndexOf(quella.valoreCarta))
                    return  true;
                else
                    return false;
            }
            public static bool operator >(Carta questa, Carta quella)
            {
                if (questa.listaValoriCarte.IndexOf(questa.valoreCarta) > quella.listaValoriCarte.IndexOf(quella.valoreCarta))
                    return true;
                else
                    return false;
            }
    Grazie ciao.
    un uomo senza panza e come un cielo senza stelle ...mio tris ...

  8. #8
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    I got the remedy

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.