在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,今天就先到这,希望大家拍砖……

posted @ 2015-07-14 13:22  EugeneLi  阅读(12862)  评论(0编辑  收藏  举报