【发布时间】:2011-06-23 07:15:09
【问题描述】:
让我们从 List BinarySearch 的重载开始:
public int BinarySearch(T item, IComparer<T> comparer);
众所周知,在使用 BinarySearch 之前,应该使用适当的 IComparer 对列表进行排序。但随后:要搜索列表,您必须提供 T 项。当人们习惯于根据这些项目的属性(即使用 Linq 或委托/谓词)搜索列表中的项目时,这是相当出乎意料的。因为当我已经有了我的 T 件时,我就不必搜索它了!
现在我正在用 C# 实现 C++ 代码,并看到 C++ 程序员在他的代码中到处使用 C++ 样式的二进制搜索,如下所示。首先,他制作了一个新的 T 物品,并为这个 T 物品提供了他正在寻找的属性。然后他用它搜索列表,找到列表中具有相同属性的项目的索引。 C++ 比较器当然适用于这些属性。
所以这是在列表中查找项目的一种完全不同的方式。 BinarySearch 创建一个 dummy T 项并搜索一个索引,它可以使用该索引检索列表中的 real T 项。从 Linq 的角度来看,这感觉不自然。
我的问题是:
我是否正确描述了 BinarySearch 背后的想法?
您认为可以在 BinarySearch 中使用 Linq 样式搜索而无需先创建虚拟 T 项吗?
【问题讨论】:
标签: c# list binary-search