【发布时间】:2011-09-23 05:03:53
【问题描述】:
我有一个列表:
List<Student> allStudents = new List<Student>();
包含超过 94,000 个 Student 对象,其中 Student 定义为:
public class Student
{
public Int32 ID { get; set; }
public String Surname { get; set; }
public String Other_Names { get; set; }
public String DOB { get; set; }
// remaining fields omitted
}
并按姓氏排序。
从另一个来源获取 Student 对象后,我想对 List allStudents 进行二进制搜索,以仅基于 Surname 属性查找匹配项。例如,如果 List allStudents 中的现有记录是:
Student(8139241, "Flintstone", "Fred", "12/1/1967")
然后我搜索该项目:
Student(7294311, "Flintstone", "Wilma", "14/6/1969")
二分查找应该是成功的。
List.BinarySearch(T, IComparer) 重载似乎是一种可能性,但它是一个可行的解决方案吗?还是有更好的策略?我将处理大量记录和搜索,因此 O(n) 搜索功能将不可行。
提前致谢!
更新:我决定用 Wintellect PowerCollections 库中的 MultiDictionary 替换我的列表。这个 MultiDictionary 可以接受重复的键。
【问题讨论】: