0

注意してください、私はArrayListが古いことを知っています...などですが、それがどのように機能するかを知り、理解する必要があるので、ご容赦ください(ところで、クマのwrogのスペルかどうかわからない、スペルの仕方を忘れました...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 >>")

したがって、ユーザーは名前を入力しますが、...

配列リストには a.sort()と aがある.binarysearch()ので、名前が入力された人物の位置を二分探索法で探したい

バイナリ検索にはパラメーター(Object value)が必要ですが、ユーザーが入力した名前をオブジェクトパラメーターとして渡すにはどうすればよいですか???

助けてください!!!

4

2 に答える 2

3

これは機能します:

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;

    }
}
于 2013-10-22T20:38:23.957 に答える
2

オブジェクト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);
    }

    ...
}

お勧めしませんが、ジェネリックを避ける例に従いました。これを行う場合は、おそらくEqualsandもオーバーライドする必要がありますGetHashCode

Tim S. には、代わりに使用する良い答えがありますIComparer。考えてみると、 s が本質的に比較可能であると考えるかPerson、単に比較できると考えるかによって、より意味のあるものになる可能性があります。

于 2013-10-22T20:27:35.333 に答える