Конец определения:
Инструменты:
/// <summary>
/// 用于比较排序的数据的委托
/// </summary>
/// <typeparam name="T">传入的对象(数据类型)</typeparam>
/// <typeparam name="TKey">要比较排序的数据,即对象的属性 或对象本身</typeparam>
/// <param name="tObj">传入的对象(数据类型)</param>
/// <returns></returns>
public delegate TKey SelectHandler<T, TKey>(T tObj);
//数组帮助类
public static class ArrayHelper
{
/// <summary>
/// 对泛型(任意类型)数组进行升序排序(对于 自己创建的数据类型 可根据自定义属性排序)
/// </summary>
/// <typeparam name="T">传入的对象(数据类型)</typeparam>
/// <typeparam name="TKey">对象的属性 或对象本身</typeparam>
/// <param name="array">传入的对象(数据类型)数组 要比较排序的数据</param>
/// <param name="handler">选择比较排序的数据的委托(方法) 用于比较的数据</param>
/// <returns>排序后的数组 数据</returns>
public static T[] ArraySort<T, TKey>(T[] array, SelectHandler<T, TKey> handler)
where TKey : IComparable<TKey>
{
//冒泡排序 连续两两比较
for (int r = 0; r < array.Length - 1; r++)//n-1 轮比较
{
for (int c = 0; c < array.Length - 1 - r; c++)//每轮比较的次数
{
//handler(array[c]) 委托调用 返回值为TKey 要比较的数据
if (handler(array[c]).CompareTo(handler(array[c + 1])) > 0)
{
T temp = array[c];
array[c] = array[c + 1];
array[c + 1] = temp;
}
}
}
return array;
}
}
Пользовательский тип данных (студенческий класс):
//Студенческий класс
class Student
{ public int Id { set; get; } public string Name { set; get; } public int Age { set; get; } /// <summary> /// пользовательский тип заголовка /// < /summary> public Head head; } /// <summary> /// Класс Head сравнивает Count по умолчанию /// </summary> class Head:IComparable<Head> { public int Count { set; get; }
/// <summary>
/// Компаратор в этом классе по умолчанию сравнивает Count
/// </summary>
/// <param name="other"></param>
/// <returns></returns>
public int CompareTo(Head other)
{ return this.Count.CompareTo(other.Count); } }
Звонивший:
static void Main (string [] args)
{ Student [] student = new Student [] { new Student () { Id = 1, Age = 18, Name = "D", head = new Head { Count = 5} }, новый студент () {Id = 2, возраст = 17, имя = "T", голова = новый руководитель { количество = 3}}, новый ученик () { Id = 3, возраст = 16, имя = "C", голова =new Head{ Count = 6}} }; int[] num = { 1, 5, 3, 6, 2 }; // Сортировка целочисленного массива ArrayHelper.ArraySort(num,(a)=>a);/ /num : 1 2 3 5 6 //Сортировка по возрасту класса учащихся //ArrayHelper.ArraySort(student,(a)=> { return a.Age; });//student.Age:16 17 18 // Согласно сортировке данных заголовка класса Student
ArrayHelper.ArraySort(student,(a)=> { return a.head; });//student.head:3 5 6
}