Класс инструментов массива: сортировка массивов любого типа (с использованием всплытия, делегирования, дженериков, интерфейсов)

Конец определения:

        Инструменты:


/// <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

        }

Supongo que te gusta

Origin blog.csdn.net/weixin_44906202/article/details/127543582
Recomendado
Clasificación