Сравнить объекты в списке массивов - PullRequest
0 голосов
/ 19 апреля 2011

У меня есть arraylist с объектами и их свойствами. Есть ли способ сравнить свойства объектов?

Обновление Ниже приведен пример списка

listTA = {(ID, MonAry[], RequestDate), (ID, MonAry[], RequestDate)};

Ответы [ 2 ]

2 голосов
/ 19 апреля 2011

Создание нового класса, реализующего интерфейс IComparer. затем вы можете отсортировать список, позвонив по номеру myList.Sort(new MyComparer());, и сравнить каждый с другим, используя новый MyComparer().Compare(firstOne, secondOne);

образец:

using System;
using System.Collections;

public class SamplesArrayList  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          // you can implement this method as you wish! cast your x and y objects and access to their properties.
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }

   }

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );
      myAL.Add( "jumps" );
      myAL.Add( "over" );
      myAL.Add( "the" );
      myAL.Add( "lazy" );
      myAL.Add( "dog" );

      // Displays the values of the ArrayList.
      Console.WriteLine( "The ArrayList initially contains the following values:" );
      PrintIndexAndValues( myAL );

      // Sorts the values of the ArrayList using the default comparer.
      myAL.Sort();
      Console.WriteLine( "After sorting with the default comparer:" );
      PrintIndexAndValues( myAL );

      // Sorts the values of the ArrayList using the reverse case-insensitive comparer.
      IComparer myComparer = new myReverserClass();
      myAL.Sort( myComparer );
      Console.WriteLine( "After sorting with the reverse case-insensitive comparer:" );
      PrintIndexAndValues( myAL );

   }

   public static void PrintIndexAndValues( IEnumerable myList )  {
      int i = 0;
      foreach ( Object obj in myList )
         Console.WriteLine( "\t[{0}]:\t{1}", i++, obj );
      Console.WriteLine();
   }

}

другой образец IComparer:

private class sortYearAscendingHelper : IComparer
{
   int IComparer.Compare(object a, object b)
   {
      car c1=(car)a;
      car c2=(car)b;
      if (c1.year > c2.year)
         return 1;
      if (c1.year < c2.year)
         return -1;
      else
         return 0;
   }
}
0 голосов
/ 19 апреля 2011

Проверьте сообщение SO,

Arraylist не может сравнивать объекты после того, как они загружены с диска

В блоге учебника можно использовать IComparable ИЛИ1008 *

http://www.codeproject.com/KB/recipes/Beginners_Sort.aspx#IComparablevsIComparer2

Спасибо

...