DotNET中List排序常用方法
对于基本类型的普通排序
直接调用Sort()方法
List<int> listBase = new List<int>() { 128, 25, 81 };
Console.WriteLine("基础类型排序前(List<int>):");
foreach (var item in listBase)
{
Console.Write($"{item} \t"); // result: 128 25 81
}
Console.WriteLine("\n基础类型排序后(List<int>):");
// 排序方法一:Sort()
listBase.Sort(); // 升序排序 result: 25 81 128
//listBase.Reverse(); //反转 result: 81 25 128
//排序方法二:使用lambda表达式,前面加个负号:
//listBase.Sort((x, y) => x.CompareTo(y)); //升序
//listBase.Sort((x, y) => -x.CompareTo(y)); //降序序
foreach (var item in listBase)
{
Console.Write($"{item} \t");
}
对于复杂或自定义类型,则推荐使用实现自指定接口的方法来实现排序
实现IComparable接口
根据单个值排序
public class Part : IComparable<Part>
{
public int PartId { get; set; }
public string PartName { get; set; }
public override string ToString()
{
return $"ID: {PartId}\t{PartName}";
}
public int CompareTo(Part comparePart)
{
if (comparePart == null)
{
return 1;
}
else
{
return PartId.CompareTo(comparePart.PartId);
}
}
}
多权重排序:现根据PartId排序,如果相等,再根据PartName排序
public int CompareTo(ETLSSource other)
{
if (other == null)
{
return 1;
}
int pResult = this.fIndex.CompareTo(other.fIndex);
if (pResult != 0)
{
return pResult;
}
int pResult = this.fTitle.CompareTo(other.fTitle);
if (pResult != 0)
{
return pResult;
}
int pResult = this.fType.CompareTo(other.fType);
if (pResult != 0)
{
return pResult;
}
return this.fGID.CompareTo(other.fGID)
}
然后调用排序:
parts.Sort(); //升序
也可以使用lambda表达式来完成排序
//单一字段排序
parts = parts.OrderBy(p => p.PartId).ToList(); //升序
//多字段排序
parts = parts.OrderBy(p => p.PartId).ThenBy(p => p.PartName).ToList();