.NET BinarySearch () на ArrayList пользовательских объектов - PullRequest
1 голос
/ 03 января 2011

У меня есть ArrayList пользовательских объектов со следующими свойствами:

  • FileName
  • FilePath
  • CurrentFolder
  • TopLevelFolder

Затем мне нужно выполнить BinarySearch (или какой-либо другой быстрый поиск) для свойства FileName для всех объектов в ArrayList в .NET.Другими словами, мне нужно найти объект в ArrayList с тем же FileName, что и тот, который я ищу.

Синтаксис BinarySearch для ArrayList:но как это сделать для свойства объекта в массиве?

  public static void FindMyObject( ArrayList myList, Object myObject )  {
    int myIndex=myList.BinarySearch( myObject );
    if ( myIndex < 0 )
       Console.WriteLine( "The object to search for ({0}) is not found. The next larger object is at index {1}.", myObject, ~myIndex );
    else
       Console.WriteLine( "The object to search for ({0}) is at index {1}.", myObject, myIndex );
  }

Ответы [ 2 ]

2 голосов
/ 03 января 2011

Существует перегрузка Areay.BinarySearch, которая принимает компаратор (http://msdn.microsoft.com/en-us/library/4ba2bttb.aspx), но в этом случае я бы просто переключился на Dictionary<string,YourType>, что звучит гораздо более уместно:

  • более быстрый выбор: O (1)
  • нет зависимости от сортируемых данных (фактически, вообще нет понятия сортировки)
  • строго типизированный
1 голос
/ 03 января 2011

Вы должны реализовать класс компаратора, и вы должны использовать определенный тип класса, а не просто объект, например, я создал класс C и произвел пользовательский поиск:

public class MyComparer : IComparer<C>
{
    #region IComparer<C> Members

    public int Compare(C x, C y)
    {
        return x.filename.CompareTo(y.filename);
    }

    #endregion
}
 public class C
 {
        public string filename;
        public string id;
 }

и использовал его:

 List<C> aList = new List<C>();
 aList.BinarySearch(myCObject, new MyComparer()); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...