C# List集合排序问题

时间:2022-06-01 05:10:32

public class Student
{
    public string name;
    public int num;
    
    //下面是一些方法及属性
    // ......
}

现有List<Student> students = new List<Student>();
如何对students进行排序,根据num排序。
我所说的是C#中的方法,Array.Sort或者C#中的其他方法。
LINQ更好。

15 个解决方案

#1


students.Sort();用重载的方法排序。

#2


List<Student> students = new List<Student>();
List<Student> sortedStudents = students.OrderBy(s => s.num).ToList();

#3


逆序
List<Student> sortedStudents = students.OrderByDescending(s => s.num).ToList();

#4


list的sort很麻烦的.3楼的不知道是否可以 学习了..

#5



//这是个比较器
public class NameComparer:Icomparer<Student>

    //实现num升序
    public int Compare(Student x,Student y)
    {
        return(x.num - y.num));
    }
}


{
    //之前我构造了一个Student的泛型叫students
    students.Sort(new NameComparer());

}

#6


谢谢wuyazhe
LINQ不会用。。。学习了,
不过如果用Array.Sort()如何实现呢?
有答案会加分结贴的。

#7


把Student继承IComparer<Student>, IComparable<Student> 这两个接口,List<Student>就可以Sort了

 public class Student : IComparer<Student>, IComparable<Student>        
    {
        public string name;
        public int num;

        //下面是一些方法及属性
        // ......
        public int Compare(Student s1, Student s2)
        {
            if (s1.num > s2.num)
                return 1;
            if (s1.num < s2.num)
                return -1;
            return 0;
        }

        public int CompareTo(Student s)
        {
            return Compare(this, s);
        }
       
    }



测试
 List<Student> l = new List<Student>();
            Student s1 = new Student();
            s1.num = 5;
            Student s2 = new Student();
            s2.num = 3;
            Student s3 = new Student();
            s3.num = 6;

            l.Add(s1);
            l.Add(s2);
            l.Add(s3);

            l.Sort();

#8


用sort
students.Sort(delegate(Student a, Student b) { return a > b; });

#9


谢谢大家,加分答谢!~
分可能不多,但谢谢你们。

#10



List<Student> students = new List<Student>();
//Linq
List<Student> sortedStudents = students.OrderByDescending(s => s.num).ToList();
//List.Sort
students.Sort((Comparison<Student>)delegate(Student a, Student b) { return a.num > b.num ? 1 : a.num == b.num ? 0 : -1; });
//Array.Sort
Array.Sort(students.ToArray(), (Comparison<Student>)delegate(Student a, Student b) { return a.num > b.num ? 1 : a.num == b.num ? 0 : -1; });

#11


呵呵,这么多好方法呀,学习了

#12


封装在类里比较好吧,符合面向对象

linq和委托虽然简洁,但是缺点
1、性能较低
2、没有封装性,需要在外面比较

#13


//ps
//Array.Sort
Array.Sort(students.ToArray(), (Comparison<Student>)delegate(Student a, Student b) { return a.num > b.num ? 1 : a.num == b.num ? 0 : -1; });

//这只是例子,实际不能这么写哦。需要写
Student[] SortedArray = students.ToArray();
Array.Sort(SortedArray, (Comparison<Student>)delegate(Student a, Student b) { return a.num > b.num ? 1 : a.num == b.num ? 0 : -1; });

#14


真强,学习了

#15


该回复于2011-11-15 10:14:29被版主删除

#1


students.Sort();用重载的方法排序。

#2


List<Student> students = new List<Student>();
List<Student> sortedStudents = students.OrderBy(s => s.num).ToList();

#3


逆序
List<Student> sortedStudents = students.OrderByDescending(s => s.num).ToList();

#4


list的sort很麻烦的.3楼的不知道是否可以 学习了..

#5



//这是个比较器
public class NameComparer:Icomparer<Student>

    //实现num升序
    public int Compare(Student x,Student y)
    {
        return(x.num - y.num));
    }
}


{
    //之前我构造了一个Student的泛型叫students
    students.Sort(new NameComparer());

}

#6


谢谢wuyazhe
LINQ不会用。。。学习了,
不过如果用Array.Sort()如何实现呢?
有答案会加分结贴的。

#7


把Student继承IComparer<Student>, IComparable<Student> 这两个接口,List<Student>就可以Sort了

 public class Student : IComparer<Student>, IComparable<Student>        
    {
        public string name;
        public int num;

        //下面是一些方法及属性
        // ......
        public int Compare(Student s1, Student s2)
        {
            if (s1.num > s2.num)
                return 1;
            if (s1.num < s2.num)
                return -1;
            return 0;
        }

        public int CompareTo(Student s)
        {
            return Compare(this, s);
        }
       
    }



测试
 List<Student> l = new List<Student>();
            Student s1 = new Student();
            s1.num = 5;
            Student s2 = new Student();
            s2.num = 3;
            Student s3 = new Student();
            s3.num = 6;

            l.Add(s1);
            l.Add(s2);
            l.Add(s3);

            l.Sort();

#8


用sort
students.Sort(delegate(Student a, Student b) { return a > b; });

#9


谢谢大家,加分答谢!~
分可能不多,但谢谢你们。

#10



List<Student> students = new List<Student>();
//Linq
List<Student> sortedStudents = students.OrderByDescending(s => s.num).ToList();
//List.Sort
students.Sort((Comparison<Student>)delegate(Student a, Student b) { return a.num > b.num ? 1 : a.num == b.num ? 0 : -1; });
//Array.Sort
Array.Sort(students.ToArray(), (Comparison<Student>)delegate(Student a, Student b) { return a.num > b.num ? 1 : a.num == b.num ? 0 : -1; });

#11


呵呵,这么多好方法呀,学习了

#12


封装在类里比较好吧,符合面向对象

linq和委托虽然简洁,但是缺点
1、性能较低
2、没有封装性,需要在外面比较

#13


//ps
//Array.Sort
Array.Sort(students.ToArray(), (Comparison<Student>)delegate(Student a, Student b) { return a.num > b.num ? 1 : a.num == b.num ? 0 : -1; });

//这只是例子,实际不能这么写哦。需要写
Student[] SortedArray = students.ToArray();
Array.Sort(SortedArray, (Comparison<Student>)delegate(Student a, Student b) { return a.num > b.num ? 1 : a.num == b.num ? 0 : -1; });

#14


真强,学习了

#15


该回复于2011-11-15 10:14:29被版主删除