📄 sorter.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 + -