如何使用BinarySearch for List <T>

Ger*_*ard 10 c# list binary-search

让我们从List BinarySearch的重载开始:

public int BinarySearch(T item, IComparer<T> comparer);
Run Code Online (Sandbox Code Playgroud)

众所周知,在使用BinarySearch之前,应该使用适当的IComparer对列表进行排序.但是:要搜索列表,您必须提供T项.当使用一个基于这些项的属性(即使用Linq或delegates /谓词)来搜索列表中的项时,这是相当意外的.因为当我已经拥有我的T项时,我不必搜索它!

现在我在C#中实现C++代码,看到C++程序员在他的代码中到处使用C++样式二进制搜索,如下所示.首先,他制作了一个新的T项目并给了这个T项目他正在寻找的属性.然后他用它搜索列表,找到具有相同属性的列表中项目的索引.当然,C++比较器适用于这些属性.

所以这是在List中查找项目的一种完全不同的方式.BinarySearch创建一个虚拟 T项并搜索一个索引,用它可以检索列表中的实际 T项.从Linq的角度来看,这感觉不自然.

我的问题是:

我是否正确描述了BinarySearch背后的想法?

您是否认为可以使用Linq样式搜索BinarySearch而不首先制作虚拟T项目?

Jar*_*dek 5

Did I give a correct description of the idea behind BinarySearch?
是.

Do you think it is possible to use a Linq style search with BinarySearch without making a dummy T item first?
不是它的当前形式.你可以使用一个为你创建虚拟T的包装器,它只适用于特定的Ts,但是(使用无参数构造函数等).