排序方法一:通过对象本身继承IComparable接口并实现,进行利用List自带方法Sort进行。
类构造如下:
public class Zoo : IComparable
{
public string Name { get;set; }
public int FightingCapacity{ get; set; }
public int CompareTo(objectobj)
{
Zoo zoo = obj as Zoo;
if (FightingCapacity> zoo.FightingCapacity)
return 1;
else if(FightingCapacity == zoo.FightingCapacity)
return 0;
else
return -1;
//可用下面这句代替
//returnFightingCapacity.CompareTo(zoo.FightingCapacity);
}
public override stringToString()
{
returnString.Format("{0}的战斗力{1}", Name,FightingCapacity);
}
}
调用方法:
List<Zoo>_TestList = new List<Zoo>()
{
new Zoo(){ Name ="老虎",FightingCapacity = 12 },
new Zoo(){ Name ="羚羊",FightingCapacity = 5},
new Zoo(){ Name ="兔子",FightingCapacity = 11},
new Zoo(){ Name ="蚂蚱",FightingCapacity = 10}
};
List<Zoo>_SortList = _TestList;
_TestList.Sort();
排序方法二:生成一个新类继承IComparer<T>
新类构造:
class TFightingCapacityCompare :IComparer<Zoo>
{
public int Compare(Zoo x, Zoo y)
{
returnx.FightingCapacity.CompareTo(y.FightingCapacity);
}
}
调用方法:
_TestList.Sort(new TFightingCapacityCompare());
排序方法三:利用委托、Lambda表达式
代码如下:
//委托、Lambda表达式
_TestList.Sort((Zoo a,Zoo b) =>
{
returna.FightingCapacity.CompareTo(b.FightingCapacity);
});
//方法相同,省略delegate
_TestList.Sort(delegate(Zoo a, Zoo b)
{
returna.FightingCapacity.CompareTo(b.FightingCapacity);
});
排序方法四:利用LINQ语句
代码如下
var _Result = _TestList.OrderBy(x => x.FightingCapacity);
总结:
方法一针对可以修改源码的情况下,方法二、三、四理论上相同,适用于无法修改对象源码的情况下。个人推荐使用Lambda表达式方法,简单、整洁。使用LINQ时需注意,LINQ的运算符操作不会对原列表进行重新排序,需将结果重新复制给新对象。
小白一个,请多指教!!!