【发布时间】:2014-11-22 13:35:40
【问题描述】:
我有以下代码,它根据 IP 地址获取国家/地区 ID:
countryID = GetAllCountryIPRanges().Single(c => c.BeginIPNum <= intIp && intIp <= c.EndIPNum).CountryID;
不幸的是,它很慢,因为有大约 200,000 条记录。范围不重叠,GetAllCountryIPRanges() 按BeginIPNum 升序排列。
如何在此列表中实现.BinarySearch() 以找到正确的记录?
【问题讨论】:
-
如果您需要快速访问值,也许值得考虑使用
Dictionary而不是一些IEnumerable集合。 -
字典不适合,因为我们正在搜索存储范围之间的不精确值(请参阅有效但缓慢的示例)
-
如果您将范围保留在
Tuple中并使用Tuple作为键? -
实施是什么意思? List
.BinarySearch(T item) 有一个默认实现。你可以用对吗? -
在这种情况下,我将自己实现二进制搜索。由于二分搜索很容易实现,因此实现比较器以与内置二分搜索一起使用的怪癖似乎不值得。
标签: c# list binary-search