自從認識了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()還是少用為好。
