让我们从 List BinarySearch 的重载开始:
public int BinarySearch(T item, IComparer<T> comparer);
众所周知,在使用 BinarySearch 之前应该使用适当的 IComparer 对列表进行排序。但是:要搜索列表,您必须提供 T 项。当人们习惯于根据列表中的项目的属性(即使用 Linq 或委托/谓词)搜索这些项目时,这是相当意外的。因为当我已经有了我的 T 项目时,我就不必搜索它了!
现在,我正在用 C# 实现 C++ 代码,发现 C++ 程序员在其代码中到处都使用了 C++ 风格的二进制搜索,如下所示。首先他制作了一个新的T物品,并赋予了这个T物品他正在寻找的属性。然后他用它搜索列表,找到列表中具有相同属性的项目的索引。 C++ 比较器当然适应了这些属性。
因此,这是一种在列表中查找项目的完全不同的方式。二分查找使得dummyT 项并搜索可以检索的索引real列表中的 T 项。从 Linq 的角度来看,这感觉不自然。
我的问题是:
我是否正确描述了 BinarySearch 背后的想法?
您是否认为可以在不先创建虚拟 T 项的情况下将 Linq 样式搜索与 BinarySearch 结合使用?
Did I give a correct description of the idea behind BinarySearch?
Yes.
Do you think it is possible to use a Linq style search with BinarySearch without making a dummy T item first?
不是目前的形式。您可以使用一个包装器来为您创建虚拟 T,但它仅适用于特定的 T(使用无参数构造函数等)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)