Tag: binary search

为什么有List .BinarySearch(…)?

我正在看List,我看到一个带有一些重载的BinarySearch方法,我不禁想知道在List中有这样的方法是否有意义? 除非列表已排序,否则为什么我要进行二进制搜索? 如果列表没有排序,调用该方法只会浪费CPU时间。 在List上使用该方法有什么意义?

C#lambda表达式和IComparer

我使用lambda表达式在C#中排序和搜索数组。 我不想在我的类中实现IComparer接口,因为我需要对多个成员字段进行排序和搜索。 class Widget { public int foo; public void Bar() { Widget[] widgets; Array.Sort(widgets, (a, b) => a.foo.CompareTo(b.foo)); Widget x = new Widget(); x.foo = 5; int index = Array.BinarySearch(widgets, x, (a, b) => a.foo.CompareTo(b.foo)); } } 虽然排序工作正常,但二进制搜索会产生编译错误无法将lambda表达式转换为类型’System.Collections.IComparer ‘,因为它不是委托类型 。 由于某种原因,Sort对IComparer和Comparison都有重载,但BinarySearch只支持IComparer。 经过一些研究,我发现了ComparisonComparer笨重的ComparisonComparer将比较转换为IComparer: public class ComparisonComparer : IComparer { private readonly Comparison comparison; public ComparisonComparer(Comparison […]

LINQ可以在订购集合时使用二进制搜索吗?

我可以以某种方式“指示”LINQ在我尝试搜索的集合被订购时使用二进制搜索。 我正在使用ObservableCollection ,填充有序数据,我正在尝试使用Enumerable.First() 。 在我的谓词中,我按照我的集合排序的字段的值进行过滤。