自定义对象的ArrayList上的.NET BinarySearch()

时间:2011-01-03 18:39:00

标签: .net search arraylist

我有一个自定义对象的ArrayList,它具有以下属性:

  • 文件名
  • 文件路径
  • CurrentFolder
  • TopLevelFolder
然后,我需要对.NET中ArrayList中所有对象的FileName属性执行BinarySearch(或其他快速搜索)。换句话说,我需要在ArrayList中找到与我正在搜索的FileName相同的FileName。

ArrayList的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 个答案:

答案 0 :(得分:2)

Areay.BinarySearch过载需要比较器(http://msdn.microsoft.com/en-us/library/4ba2bttb.aspx),但在这种情况下我只需切换到Dictionary<string,YourType>,这听起来更合适:

  • 获取速度更快:O(1)
  • 不依赖于正在排序的数据(事实上,根本没有排序的概念)
  • 强类型

答案 1 :(得分:1)

你应该实现comparer类,你应该使用特定的类类型而不仅仅是对象,例如我创建了一个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());