У меня есть список:
List<Student> allStudents = new List<Student>();
, который содержит более 94 000 объектов ученика, где ученик определяется как:
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 из другого источника я хочу выполнить двоичный поиск по списку AllStudents, чтобы найти совпадение, основанное ТОЛЬКО на свойстве Surname.Например, если существующая запись в Списке allStudents равна:
Student(8139241, "Flintstone", "Fred", "12/1/1967")
и я ищу элемент:
Student(7294311, "Flintstone", "Wilma", "14/6/1969")
, бинарный поиск должен быть успешным.
Перегрузка List.BinarySearch (T, IComparer) представляется возможной, но является ли это жизнеспособным решением?Или есть лучшая стратегия?Я буду иметь дело с большим количеством записей и поисков, поэтому функции поиска O (n) не будут жизнеспособными.
Заранее спасибо!
ОБНОВЛЕНИЕ: Я решил заменить свой Список наMultiDictionary из библиотеки Wintellect PowerCollections.Этот MultiDictionary может принимать дубликаты ключей.