在List中找出最大值的两种方法

本文介绍如何在C#、Java和JavaScript的List中找到某个属性的最大值。通过对比两种方法的实现和运行效率,第一种方法通常比第二种慢四到五倍。
摘要由CSDN通过智能技术生成

        先说需求:找出一个对象List中,某个属性值最大的对象。

  1.定义对象

1   private class A
2         {
3             public int ID { get; set; }
4 
5             public string Name { get; set; }
6         }
 2.为两种方法定义两个时间段全局变量。

1
private static TimeSpan compare = new TimeSpan(); 2 private static TimeSpan order = new TimeSpan();
 3.第一种方法:对列表按照某一列倒序排列取出第一个对象。
         private static void MaxByOrder(List<A> list)
         {
              Stopwatch sw = new Stopwatch();
      sw.Start();
      A max = list.OrderByDescending(i => i.ID).First();
      sw.Stop();
      order += sw.Elapsed;
      Console.WriteLine(max.Name + "  Order:" + sw.Elapsed.ToString());

}
4.第二种方法:先找出列表中某个属性的最大值,然后在列表中取出第一个与最大值相等的对象。
    private static void Max(List<A> list)
    {
      Stopwatch sw = new Stopwatch();
      sw.Start(); int maxID = list.Max(m => m.ID);
      A max = list.First(i => i.ID == maxID);
      sw.Stop();
      compare += sw.Elapsed;
      Console.WriteLine(max.Name + "  Compare:" + sw.Elapsed.ToString());
    }
5.Main方法:生成测试列表,并循环调用两个方法100次,打印每种方法所用时间。
 1         private static void Main(string[] args)
 2         {
 3             List<A> list = new List<A>();
 4             list = Enumerable.Range(1, 10000000).Select(n => new A { ID = n, Name = n.ToString() }).ToList();
 5             Console.WriteLine("print");
 6             int i = 0;
 7             while (i < 100)
 8             {
 9                 MaxByOrder(list);
10                 Max(list);
11                 i++;
12             }
13             Console.WriteLine("Compare:" + compare);
14             Console.WriteLine("Order:" + order);
15             Console.ReadLine();
16         }

 6.查看运行结果:

首先两种方式都找到了最大值,用第一种方式基本上花费时间为第二种的四到五倍。

ok,今天就先到这,希望大家拍砖……

转载于:https://www.cnblogs.com/codedoing/p/4645196.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值