我有一個列表:二進制搜索自定義數據類型的列表,以匹配只是一個場
List<Student> allStudents = new List<Student>();
包含94,000 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對象後,我想要對列表allStudents進行二進制搜索以僅基於Surname屬性查找匹配項。例如,如果在列表allStudents現有的記錄是:
Student(8139241, "Flintstone", "Fred", "12/1/1967")
,我搜索的項:
Student(7294311, "Flintstone", "Wilma", "14/6/1969")
二進制搜索應該是成功的。
List.BinarySearch(T,IComparer)過載似乎是一種可能性,但它是一種可行的解決方案嗎?還是有更好的策略?我將處理大量記錄和搜索,因此O(n)搜索功能將不可行。
在此先感謝!
更新:我決定從Wintellect PowerCollections庫中的MultiDictionary中替換我的List。此MultiDictionary可以接受重複密鑰。
謝謝大家對您的輸入。 @Amit有使用Linq的優勢嗎?我知道Find和FindAll是線性搜索; Linq查詢更好地攤銷? – InvalidBrainException
我不是linq的專家; Linq使用線性搜索。 Linq是一種結構化編程技術,它使代碼更具可讀性和可理解性。如果您看到該語句非常明顯,那麼代碼行試圖查找列表中與Surname字段匹配的所有項目。 –