Domanda

Si supponga che ho un oggetto con i seguenti valori in esso (anche si prega di notare che non desidero utilizzare un oggetto datetime per questo, solo i seguenti valori al di sotto e mi auguro di risolvere questo in l'operatore di confronto per sé):

int year; 
int month; 
int day;
int sec;
int min;

Come posso confrontare tutti quei valori multipli nel mio Comparer uno contro l'altro in modo da ottenere elencati data base?

Poi vorrei fare una classe Comparer.cs:

class MyComparer: IComparer
{
    int sort;

    public MyComparer(int s)
    {
        sort= s;
    }

    public int Compare(object x, object y)
    {
        Date d1 = (Date)x;
        Date d2 = (Date)y;
        int result= 0;

         // d1.Year.CompareTo(d2.Year);  //get accessors from other class
        // i seem to be limited here by comparing only 1 single value to a other?

        return result;
    }
}

}

È stato utile?

Soluzione

In questo modo:

result = d1.Year.CompareTo(d2.Year)
if (result != 0) return result;

result = d1.Month.CompareTo(d2.Month)
if (result != 0) return result;

...

return 0;   //All properties were equal

Altri suggerimenti

Si avrà solo bisogno di continuare a fare paragoni fino ad avere sia una differenza o v'è più nulla da confrontare.

int result; 
result = d1.year.CompareTo(d2.year);
if (result == 0)
   result = d1.month.CompareTo(d2.month);
if (result == 0)
   // continue comparisons through day, hour, minute, second as necessary

return result;

Inizia il confronto a partire dal primo elemento più significativo, in questo modo:

    public class MyDate : IComparable<MyDate>
    {
        public enum MyMonth { Jan = 1 , Feb , Mar , Apr , May , Jun , Jul , Aug , Sep , Oct , Nov , Dec , }

        public int     Year   ;
        public MyMonth Month  ;
        public int     Day    ;
        public int     Hour   ;
        public int     Minute ;
        public int     Second ;

        private static Comparer _comparerInstance = null ;
        private static Comparer comparerInstance
        {
            get
            {
                if ( _comparerInstance == null )
                {
                    _comparerInstance = new Comparer() ;
                }
                return _comparerInstance ;
            }
        }

        public class Comparer : IComparer<MyDate> 
        {
            #region IComparer<MyDate> Members

            public int Compare(MyDate x, MyDate y)
            {
                if ( x == null || y == null ) throw new ArgumentNullException() ;
                if ( object.ReferenceEquals(x,y) ) return 0 ;

                int rc ;

                if (      x.Year < y.Year ) rc = -1 ;
                else if ( x.Year > y.Year ) rc = +1 ;
                else // x.Year == y.Year
                {
                    if (      x.Month < y.Month ) rc = -1 ;
                    else if ( x.Month > y.Month ) rc = +1 ;
                    else // x.Month == y.Month
                    {
                        if (      x.Day < y.Day ) rc = -1 ;
                        else if ( x.Day > y.Day ) rc = +1 ;
                        else // x.Day == y.Day
                        {
                            if (      x.Hour < y.Hour ) rc = -1 ;
                            else if ( x.Hour > y.Hour ) rc = +1 ;
                            else // x.Hour == y.Hour
                            {
                                if (      x.Minute < y.Minute ) rc = -1 ;
                                else if ( x.Minute > y.Minute ) rc = +1 ;
                                else // x.Minute = y.Minute
                                {
                                    if (      x.Second < y.Second ) rc = -1 ;
                                    else if ( x.Second > y.Second ) rc = -1 ;
                                    else /* x.Second == y.Seconds */ rc = 0 ;
                                }
                            }
                        }
                    }
                }

                return rc ;
            }
            #endregion
        }

        #region IComparable<MyDate> Members

        public int CompareTo( MyDate other )
        {
            return comparerInstance.Compare( this , other ) ;
        }

        #endregion
    }

E 'solo noioso lavoro idraulico, nessuna magia ad esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top