1

基本上我在这里要做的是创建自己的结构并通过获取用户输入来利用它,将其添加到列表中,然后以不同的方式(ID等)对其进行排序。

我认为我正确地制作了结构,但我不知道如何比较这两个学生实例,按 ID 对它们进行排序,然后将它们打印出来(按 ID 排序)到控制台。

有任何想法吗?我想我正朝着正确的方向前进。

   namespace App26
{
    public struct Student
    {
        public String first, last;
        public double ID;

        public Student(String first, String last, double ID)
        {
            this.first = first;
            this.last = last;
            this.ID = ID;
        }
    }

    class IDCompare : IComparer<Student>
    {
        public int Compare(Student a, Student b)
        {
            return a.first.CompareTo(b.f);
        }
    }


    class Program
    {

        static void Main(string[] args)
        {
            String firstname, lastname, first, last;
            double num, IDnum;

            //First person   
            Console.WriteLine("Please enter first name");
            firstname = Console.ReadLine();
            Console.WriteLine("Please enter last name");
            lastname = Console.ReadLine();
            Console.WriteLine("Please enter ID");
            IDnum = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine();

            //Second Person
            Console.WriteLine("Please enter first name");
            first = Console.ReadLine();
            Console.WriteLine("Please enter last name");
            last = Console.ReadLine();
            Console.WriteLine("Please enter ID");
            num = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine();

            List<Student> list = new List<Student>();
            Student person1 = new Student(firstname, lastname, IDnum);
            //Student person2 = new Student(first, last, num);
            list.Add(person1);
            list.Add(person2);
            list.Sort();

            foreach (Student i in list)
            Console.WriteLine(i);
        }        
       }
}
4

3 回答 3

2

您应该使用下面的代码进行排序

list.Sort(new IDCompare()); 

return a.first.CompareTo(b.f);

似乎不正确。请同时检查您的代码编译时错误。

于 2012-11-20T17:15:33.680 回答
1

IDCompare不是在比较 ID,而是首先比较 ID(我假设是名称)。你应该像这样改变它:

class IDCompare : IComparer<Student>
{
    public int Compare(Student a, Student b)
    {
        return a.ID.CompareTo(b.ID);
    }
}

然后像这样调用你的排序:

list.Sort(new IDCompare());

请记住,ID 通常是整数,而不是双精度数(尽管我不知道您的 ID 是什么意思)。

如果你想使用这个

 foreach (Student i in list)
            Console.WriteLine(i);

我建议您覆盖ToString()结构中的方法(为什么不使用类?)

public override string ToString()
{
       return ID.ToString() + " " + first + " " + last + " ";
}
于 2012-11-20T17:28:13.453 回答
1

您也可以非常轻松地使用 Linq。然后你不需要实现任何比较器。

foreach (Student entry in myList.OrderBy(student => student.ID))
  Console.Write(entry.Name);

也可以按第二个属性排序。您也可以使用降序排序。

foreach (Student entry in myList.OrderBy(student => student.ID).ThenBy(student => student.Name))
  Console.Write(entry.Name);
于 2012-11-20T18:17:11.703 回答