⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sorter.cs

📁 5种.net写的排序的方法
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Text;

namespace IAXK.Sys
{
    /// <summary>
    /// 排序顺序
    /// </summary>
    [Serializable]
    public enum OrderType
    {
        /// <summary>
        /// 升序
        /// </summary>     
        otAsc,

        /// <summary>
        /// 降序
        /// </summary>
        otDesc
    }


    /// <summary>
    /// 排序器
    /// </summary>
    /// <typeparam name="T"></typeparam>
    [Serializable]
    public abstract class Sorter<T> where T:IComparable,IComparable<T>
    {
        /// <summary>
        /// 具体排序算法
        /// </summary>
        /// <param name="v">排序数组</param>
        /// <param name="ot">排序顺序</param>
        protected  abstract void Algorithm(T[] v,OrderType ot);

        /// <summary>
        /// 字符串比较器
        /// </summary>
        private StringComparer strcmp = null;


        /// <summary>
        /// 创建字符串比较器
        /// </summary>
        private void CreateStringComparer()
        {
            if (ignoreCase)
                strcmp = StringComparer.CurrentCultureIgnoreCase;
            else
                strcmp = StringComparer.CurrentCulture;            
        }

        /// <summary>
        /// 比较两个字符串
        /// </summary>
        /// <param name="s1"></param>
        /// <param name="s2"></param>
        /// <returns></returns>
        private int CompareString(string s1, string s2)
        {
            if (strcmp == null)
                CreateStringComparer();
            return strcmp.Compare(s1, s2);
        }

        /// <summary>
        /// 实现两个值的比较
        /// </summary>
        /// <param name="t1"></param>
        /// <param name="t2"></param>
        /// <param name="ot"></param>
        /// <returns></returns>
        protected int CompareValue(T t1, T t2, OrderType ot)
        {
            int i = 0;
            if (t1 is string)
            {
                i = CompareString(t1 as string, t2 as string);
            }
            else
                i = t1.CompareTo(t2);
            if (ot == OrderType.otDesc)
            {
                i *= -1;
            }
            return i;
        }

        /// <summary>
        /// 对给定数组进行排序
        /// </summary>
        /// <param name="v">排序数组</param>
        /// <param name="ot">排序方法</param>
        public void Sort(T[] v, OrderType ot)
        {
            if ((v == null) || (v.Length < 2))
                return;
            Algorithm(v, ot);
        }

        /// <summary>
        /// 按升序进行排序
        /// </summary>
        /// <param name="v">排序数组</param>
        public void Sort(T[] v)
        {
            Sort(v, OrderType.otAsc);
        }

        /// <summary>
        /// 字符串比较时是否忽略大小写
        /// </summary>
        private bool ignoreCase = false;


        /// <summary>
        /// 指示字符串比较时是否忽略大小写
        /// </summary>
        public bool IgnoreCase
        {
            get { return ignoreCase; }
            set
            {
                ignoreCase = value;
                CreateStringComparer();
            }
        }


        /// <summary>
        /// 交换
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        protected void Swap(ref T a, ref T b)
        {
            T t = a;
            a = b;
            b = t;
        }

    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -