自從認識了FindAll(),一般List中查找符合條件的數據項我都用List<T>.Find()或List<T>.FindAll().
代碼簡潔,自己看了賞心悅目,況且是微軟內部的方法,效率應該不會差。
然而,今天心血來潮,寫代碼測試了一下,確發現FindAll()比For循環效率差了好多,集合比較小的時候這差異就更明顯了。
測試代碼:
Stopwatch watch = new Stopwatch(); Random rand = new Random(); List<int> list = new List<int>(); //構造一個LIST for (int i = 0; i < 100; i++) { list.Add(rand.Next(10)); } //用FindAll watch.Start(); List<int> resultFindAll = list.FindAll(delegate(int i) { return i == 5; }); watch.Stop(); Console.WriteLine("FindAll:" + watch.Elapsed.Ticks); Console.WriteLine("resultFindAll:" + resultFindAll.Count); //用For循環 List<int> resultFor = new List<int>(); watch.Reset(); watch.Start(); for (int i = 0; i < list.Count; i++) { if (list[i] == 5) { resultFor.Add(list[i]); } } watch.Stop(); Console.WriteLine("For:"+watch.Elapsed.Ticks); Console.WriteLine("resultFor:" + resultFor.Count);
List長度為100時的測試結果,即上面的代碼:
哎,集合小的時候差距最為明顯,想不到差了五六十倍。
看來以后List<T>.FindAll()還是少用為好。