先說需求:找出一個對象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,今天就先到這,希望大家拍磚……