快速查找已排序列表中的项目索引

Leo*_* Vo 1 .net c# list

我有一个对象:

public class MyObject
{
int id;
string value;
}
Run Code Online (Sandbox Code Playgroud)

我也有一个清单:

List<MyObject> list = new List<MyObject>;
for(int i=0;i;i<100000;i++)
{
list.Add(new MyObject(i, string.Format("Item {0}", i));
}
Run Code Online (Sandbox Code Playgroud)

列表将是:

1, "Item 1"
2, "Item 2"
....
99999, "Item 99999"
Run Code Online (Sandbox Code Playgroud)

此列表是按ID字段排序的排序列表.请注意,这是一个描述排序列表的示例,它不像上面的示例那样简单.

我想根据ID字段找到一个有序列表项.我不知道.NET Framework是否支持在没有枚举的情况下快速搜索有序列表.

我对表现感兴趣,因为列表很重要.谢谢.

最好的祝福.

Luk*_*keH 6

您可以使用二进制搜索.

您可以使用内置实现,提供IComparer<T>比较类型id属性的自定义:

var objToFind = new MyObject { id = 42 };

int foundIndex = yourList.BinarySearch(objToFind, new MyObjectIdComparer());

// ...

public class MyObjectIdComparer : Comparer<MyObject>
{
    public override int Compare(MyObject x, MyObject y)
    {
        // argument checking etc removed for brevity

        return x.id.CompareTo(y.id);
    }
}
Run Code Online (Sandbox Code Playgroud)