将 C# arraylist.binarysearch 与自定义对象一起使用

本文关键字:对象 一起 自定义 arraylist binarysearch | 更新日期: 2023-09-27 18:36:24

请注意,我知道 ArrayList 很旧...等等,但我需要知道和理解它是如何工作的,所以请耐心等待(顺便说一句,不确定我是否拼写了熊蛙,我忘记了如何拼写它......xD)

我明天要写一个测试(我在大学),但我对这个问题处于死胡同,我喜欢整理问题,但我找不到任何解决方案......

假设我有:

class Person 
{
    private string name, surname;
    private int age, year born;
    //with more variables, etc...

我还有另一节课

Class People
{
    ArrayList arlPeople = new ArrayList();
}

我知道代码没有任何工作顺序,但这只是为了让我的问题更清楚

好的,所以我想知道,用户输入了一个名称

Console.Writeline("display all dat of the person by entering their name >>")

所以用户输入的名称,但是...

由于数组列表提供了.sort().binarysearch(),我想通过使用二叉搜索方法找到输入姓名的人的位置

二叉搜索需要一个参数(Object value),但我如何将用户输入的名称作为对象参数传递???

请帮忙!!

将 C# arraylist.binarysearch 与自定义对象一起使用

这有效:

class NameComparer : IComparer
{
    public int Compare(Object x, Object y)
    {
        var xs = (Swimmer)x;
        var ys = (Swimmer)y;
        return xs.Name.CompareTo(ys.Name);
    }
}
class Swimmer
{
    public string Name { get; set; }
}
class Swimmers
{
    ArrayList AllSwimmers;
    IComparer nameComparer = new NameComparer();
    public Swimmers()
    {
        AllSwimmers = new ArrayList();
        AllSwimmers.Add(new Swimmer { Name = "Tom" });
        AllSwimmers.Add(new Swimmer { Name = "Joe" });
        AllSwimmers.Add(new Swimmer { Name = "George" });
        AllSwimmers.Sort(nameComparer);
    }
//some other methods in between
    public int GetOnName()
    {
        Console.WriteLine("Enter the name of the swimmer");
        string name = Console.ReadLine();
        int pos = AllSwimmers.BinarySearch(new Swimmer { Name = name }, nameComparer);
        Console.WriteLine(pos);
        return pos;
    }
}

您的Person对象可以实现IComparable。也就是说,您需要添加一个比较名称的compareTo方法:

class Person : IComparable
{
    private string name, surname;
    private int age, year born;
    public int CompareTo(object obj) {
        return name.compareTo((obj as Person).name);
    }
    ...
}

我不推荐它,但我遵循了你避免泛型的例子。如果这样做,您可能也应该覆盖EqualsGetHashCode

Tim S.有一个很好的答案,改用IComparer。考虑一下,这可能更有意义,这取决于您认为Person本质上是可比的还是能够进行比较的。