在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