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


        先说需求:找出一个对象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,今天就先到这,希望大家拍砖……


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM