using System;
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Student [] students=new Student [5];
students[0]=new Student ("王小红",20,1);
students[1]=new Student ("周军",23,2);
students[2]=new Student ("方小白",21,2);
students[3]=new Student ("高强",25,3);
students[4]=new Student ("王浩",22,3);
Student .CompareFunction compare;
Console .WriteLine ("请选择排序方式:A姓名 B年龄 C年级");
char ch =Console .ReadKey ().KeyChar ;
if (ch =='B'||ch=='b')
compare =CompareAge ;
else if (ch =='C'||ch =='c')
compare =CompareGrade ;
else
compare =CompareName ;
Student .SortAndPrint (students,compare );
}
static int CompareName(Student s1, Student s2)
{
return 0 - s1.Name.CompareTo(s2.Name);
}
static int CompareAge(Student s1, Student s2)
{
return s1.Age - s2.Age;
}
static int CompareGrade(Student s1, Student s2)
{
return s1.Grade - s2.Grade;
}
}
public class Student
{
private string name;
public string Name
{
get { return name; }
} private int age;
public int Age
{
get { return age; }
} private int grade;
public int Grade
{
get { return grade; }
set { grade = value; }
} public Student(string name, int age, int grade)
{
this.name = name;
this.age = age;
this.grade = grade;
}
public static void SortAndPrint(Student[] students, ComparerFunction compare)
{
for (int i=students .Length -1;i>0;i--)
for (int j=0;j<i;j++)
if (compare(students[j], students[j + 1]) > 0)
{
Student s = students[j];
students[j] = students[j + 1];
students[j + 1] = s;
}
foreach (Student s in students)
Console.WriteLine(s); }
public override string ToString()
{ return string.Format("{0}{1}岁 {2}年级", name, age, grade); }
public delegate int CompareFunction(Student s1, Student s2);
}
}
。
添加多重排序功能,即若姓名相同就按年龄排序,若姓名年龄都相同了就按年级排序
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Student [] students=new Student [5];
students[0]=new Student ("王小红",20,1);
students[1]=new Student ("周军",23,2);
students[2]=new Student ("方小白",21,2);
students[3]=new Student ("高强",25,3);
students[4]=new Student ("王浩",22,3);
Student .CompareFunction compare;
Console .WriteLine ("请选择排序方式:A姓名 B年龄 C年级");
char ch =Console .ReadKey ().KeyChar ;
if (ch =='B'||ch=='b')
compare =CompareAge ;
else if (ch =='C'||ch =='c')
compare =CompareGrade ;
else
compare =CompareName ;
Student .SortAndPrint (students,compare );
}
static int CompareName(Student s1, Student s2)
{
return 0 - s1.Name.CompareTo(s2.Name);
}
static int CompareAge(Student s1, Student s2)
{
return s1.Age - s2.Age;
}
static int CompareGrade(Student s1, Student s2)
{
return s1.Grade - s2.Grade;
}
}
public class Student
{
private string name;
public string Name
{
get { return name; }
} private int age;
public int Age
{
get { return age; }
} private int grade;
public int Grade
{
get { return grade; }
set { grade = value; }
} public Student(string name, int age, int grade)
{
this.name = name;
this.age = age;
this.grade = grade;
}
public static void SortAndPrint(Student[] students, ComparerFunction compare)
{
for (int i=students .Length -1;i>0;i--)
for (int j=0;j<i;j++)
if (compare(students[j], students[j + 1]) > 0)
{
Student s = students[j];
students[j] = students[j + 1];
students[j + 1] = s;
}
foreach (Student s in students)
Console.WriteLine(s); }
public override string ToString()
{ return string.Format("{0}{1}岁 {2}年级", name, age, grade); }
public delegate int CompareFunction(Student s1, Student s2);
}
}
。
添加多重排序功能,即若姓名相同就按年龄排序,若姓名年龄都相同了就按年级排序
public class StudentComparer : IComparer<Student>
{
public enum CompareType
{
Name,
Age,
Grade
}
private CompareType type;
public StudentComparer(CompareType type)
{
this.type = type;
}
public int Compare(Student x, Student y)
{
switch(this.type)
{
case CompareType.Name:
return x.Name.CompareTo(y.Name);
case CompareType.Age:
return x.Age.CompareTo(y.Age);
default:
return x.Grade.CompareTo(y.Grade);
}
}
}
方法二:用DataTable.DefaultView获取DataView对象,然后使用DataView.Sort 属性排序,例如:
DataView view = DataTable1.DefaultView;
view.Sort = "State, ZipCode DESC";
if(i==students.Length-1)
continue;
if(studens[i].grade>students[i+1].grade){
Student newStudent=students[i];
students[i]=students[i+1];
students[i+1]=newStudent;
}else if(studens[i].grade=students[i+1].grade){
if(studens[i].age>students[i+1].age){
Student newStudent=students[i];
students[i]=students[i+1];
students[i+1]=newStudent;
}else if(studens[i].age=students[i+1].age){
if(studens[i].name>students[i+1].name){
Student newStudent=students[i];
students[i]=students[i+1];
students[i+1]=newStudent;
}
}
}
}
{
return 0 - s1.Name.CompareTo(s2.Name);
}
改为:
static int CompareName(Student s1, Student s2)
{
return s1.Name.CompareTo(s2.Name);
}
compare =CompareAge ;
else if (ch =='C'||ch =='c')
compare =CompareGrade ;
else
compare =CompareName ; 貌似你的委托只有绑定一个方法吧,这样只会进行一个条件的排列啊
compare +=CompareAge ;
compare +=CompareGrade ;
compare +=CompareName ;