gpt4 book ai didi

c# - 二进制搜索自定义数据类型列表以仅匹配一个字段

转载 作者:行者123 更新时间:2023-11-30 19:03:09 25 4
gpt4 key购买 nike

我有一个列表:

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 可以接受重复的键。

最佳答案

List.BinarySearch 是一个很好的解决方案,并且可以像您期望的那样工作。这是一个显示 solution similar 的链接到 IComparer 所需的内容。不过,他们的示例没有使用 Generic IComparer。

public class CompareCustomDataType : IComparer<Student> {

public int Compare(Student x, Student y)
{
if (x == y) return 0;
if (x == null) return -1;
if (y == null) return 1;

return String.Compare(x.Surname, y.Surname);
}
...
}

关于c# - 二进制搜索自定义数据类型列表以仅匹配一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6488201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com