You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
5.4 KiB
161 lines
5.4 KiB
using Apewer.Internals;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
|
|
namespace Apewer
|
|
{
|
|
|
|
/// <summary>排序实用工具。</summary>
|
|
public class SortUtility
|
|
{
|
|
|
|
#region compare
|
|
|
|
/// <exception cref="ArgumentException"></exception>
|
|
public static int Ascend<T>(T a, T b) where T : IComparable
|
|
{
|
|
if (a == null) return b == null ? 0 : b.CompareTo(a);
|
|
return b == null ? 1 : a.CompareTo(b);
|
|
}
|
|
|
|
/// <exception cref="ArgumentException"></exception>
|
|
public static int Descend<T>(T a, T b) where T : IComparable
|
|
{
|
|
return 0 - Ascend(a, b);
|
|
}
|
|
|
|
/// <exception cref="ArgumentException"></exception>
|
|
public static int AscendT<T>(T a, T b) where T : IComparable<T>
|
|
{
|
|
if (a == null) return b == null ? 0 : b.CompareTo(a);
|
|
return b == null ? 1 : a.CompareTo(b);
|
|
}
|
|
|
|
/// <exception cref="ArgumentException"></exception>
|
|
public static int DescendT<T>(T a, T b) where T : IComparable<T>
|
|
{
|
|
return 0 - AscendT(a, b);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region enumerable
|
|
|
|
/// <summary>升序排序。</summary>
|
|
public static List<T> Ascend<T>(IEnumerable<T> items) where T : IComparable
|
|
{
|
|
var list = new List<T>(items);
|
|
list.Sort(Ascend);
|
|
return list;
|
|
}
|
|
|
|
/// <summary>降序排序。</summary>
|
|
public static List<T> Descend<T>(IEnumerable<T> items) where T : IComparable
|
|
{
|
|
var list = new List<T>(items);
|
|
list.Sort(Descend);
|
|
return list;
|
|
}
|
|
|
|
/// <summary>升序排序。</summary>
|
|
public static List<T> AscendT<T>(IEnumerable<T> items) where T : IComparable<T>
|
|
{
|
|
var list = new List<T>(items);
|
|
list.Sort(AscendT);
|
|
return list;
|
|
}
|
|
|
|
/// <summary>降序排序。</summary>
|
|
public static List<T> DescendT<T>(IEnumerable<T> items) where T : IComparable<T>
|
|
{
|
|
var list = new List<T>(items);
|
|
list.Sort(DescendT);
|
|
return list;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region dictionary
|
|
|
|
/// <summary>对 Key 排序。</summary>
|
|
public static List<KeyValuePair<TKey, TValue>> Keys<TKey, TValue>(Dictionary<TKey, TValue> target, Comparison<TKey> comparison) where TKey : IComparable<TKey>
|
|
{
|
|
if (target == null) return null;
|
|
|
|
var keys = new List<TKey>();
|
|
keys.AddRange(target.Keys);
|
|
if (comparison == null) keys.Sort();
|
|
else keys.Sort(comparison);
|
|
|
|
var output = new List<KeyValuePair<TKey, TValue>>();
|
|
foreach (var key in keys) output.Add(key, target[key]);
|
|
|
|
return output;
|
|
}
|
|
|
|
/// <summary>对 Key 升序排序。</summary>
|
|
public static List<KeyValuePair<TKey, TValue>> KeysAscend<TKey, TValue>(Dictionary<TKey, TValue> target) where TKey : IComparable<TKey>
|
|
{
|
|
return Keys(target, new Comparison<TKey>(AscendT));
|
|
}
|
|
|
|
/// <summary>对 Key 升序排序。</summary>
|
|
public static List<KeyValuePair<TKey, TValue>> KeysDescend<TKey, TValue>(Dictionary<TKey, TValue> target) where TKey : IComparable<TKey>
|
|
{
|
|
return Keys(target, new Comparison<TKey>(DescendT));
|
|
}
|
|
|
|
/// <summary>对 Key 升序排序。</summary>
|
|
public static Dictionary<string, string> SortKeyAscend(Dictionary<string, string> dictionary)
|
|
{
|
|
return SortHelper.DictionaryStringString(dictionary, true, true);
|
|
}
|
|
|
|
/// <summary>对 Key 降序排序。</summary>
|
|
public static Dictionary<string, string> SortKeyDecend(Dictionary<string, string> dictionary)
|
|
{
|
|
return SortHelper.DictionaryStringString(dictionary, true, false);
|
|
}
|
|
|
|
/// <summary>对 Value 升序排序。</summary>
|
|
public static Dictionary<string, string> SortValueAscend(Dictionary<string, string> dictionary)
|
|
{
|
|
return SortHelper.DictionaryStringString(dictionary, false, true);
|
|
}
|
|
|
|
/// <summary>对 Value 降序排序。</summary>
|
|
public static Dictionary<string, string> SortValueDecend(Dictionary<string, string> dictionary)
|
|
{
|
|
return SortHelper.DictionaryStringString(dictionary, false, false);
|
|
}
|
|
|
|
/// <summary>对 Key 升序排序。</summary>
|
|
public static Dictionary<string, double> SortKeyAscend(Dictionary<string, double> dictionary)
|
|
{
|
|
return SortHelper.DictionaryStringDouble(dictionary, true, true);
|
|
}
|
|
|
|
/// <summary>对 Key 降序排序。</summary>
|
|
public static Dictionary<string, double> SortKeyDecend(Dictionary<string, double> dictionary)
|
|
{
|
|
return SortHelper.DictionaryStringDouble(dictionary, true, false);
|
|
}
|
|
|
|
/// <summary>对 Value 升序排序。</summary>
|
|
public static Dictionary<string, double> SortValueAscend(Dictionary<string, double> dictionary)
|
|
{
|
|
return SortHelper.DictionaryStringDouble(dictionary, false, true);
|
|
}
|
|
|
|
/// <summary>对 Value 降序排序。</summary>
|
|
public static Dictionary<string, double> SortValueDecend(Dictionary<string, double> dictionary)
|
|
{
|
|
return SortHelper.DictionaryStringDouble(dictionary, false, false);
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
}
|
|
|