C# · 12月 27, 2021

c# – 如何使用BinarySearch列表

我们从List BinarySearch的这个重载开始: public int BinarySearch(T item,IComparer<T> comparer);

众所周知,在使用BinarySearch之前,该列表应与适当的IComparer进行排序.但是然后:要搜索列表,您将必须提供一个T项目.当根据这些项目的属性(即使用Linq或委托/谓词)用于搜索列表中的项目时,这是非常意想不到的.因为当我已经有我的T项目,我不必搜索它!

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

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

我的问题是:

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

您认为可以使用BinarySearch进行Linq风格搜索,而不会首先创建虚拟T项目?

解决方法 我是否正确描述了BinarySearch背后的想法?
是.

您认为可以使用BinarySearch进行Linq风格搜索,而不会首先创建虚拟T项目?不是现在的形式.您可以使用一个为您创建虚拟T的包装器,但它仅适用于特定的Ts,尽管(使用无参数构造函数等).