针对List Object问题排序进行探讨

 

排序方法一:通过对象本身继承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的运算符操作不会对原列表进行重新排序,需将结果重新复制给新对象。

    小白一个,请多指教!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值