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()如何实现呢?
有答案会加分结贴的。
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; });
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、没有封装性,需要在外面比较
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
#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()如何实现呢?
有答案会加分结贴的。
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; });
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、没有封装性,需要在外面比较
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
真强,学习了