ID的BinarySearch对象数组

Adm*_*and 5 .net c# compare list binary-search

美好的一天!

我有一个ValueObj列表:

class ValueObj
{
   int ID;
   float value;
}
Run Code Online (Sandbox Code Playgroud)

如何通过ID获取二进制搜索对象?(列出tempValues)

我做ValueComparer类,但是不知道我说的对吗?

class ValueComparer<ValueObj>
{
   public int Compare(ValueObjx, ValueObjy)
   {
       if (x == y) return 0;
       if (x == null) return -1;
       if (y == null) return 1;

       return -1; ///???
   }
}
Run Code Online (Sandbox Code Playgroud)

我需要按ID对列表进行排序。像那样?:

tempValues.Sort(new ValueComparer());

以及如何使用BinarySearch?

Ste*_*ook 0

C# 中的 List 类有一个BinarySearch方法,您可以将其与 Comparable 一起使用。

您的类型:

class ValueObj
{
    public int ID{ get; set;}
    public float value { get; set;}
}
Run Code Online (Sandbox Code Playgroud)

您的比较类(不要忘记实现正确的接口!):

class ValueObjIDComparer : IComparable<ValueObj>
 {

    public int Compare(ValueObj x, ValueObj y)
    {
        if (x == null) return -1;
        if (y == null) return 1;

        if (x.ID == y.ID) return 0;            

        return x.ID > y.ID ? 1 : -1;
    }
 }
Run Code Online (Sandbox Code Playgroud)

执行二分查找:

List<ValueObj> myList = new List<ValueObj>();
myList.Add(new ValueObj(){ID=1});
myList.Add(new ValueObj(){ID=2});
// ...

int idToFind = 2;
myList.Sort(new ValueObjIDComparer());
int indexOfItem = myList.BinarySearch(idToFind, new ValueObjIDComparer()); 
Run Code Online (Sandbox Code Playgroud)

您还可以对列表执行更多操作。请参阅此处的文档。

  • 您正在 idToFind 上搜索。这是一个整数。但 BinarySearch 方法需要一个 ValueObj 作为第一个参数。 (5认同)