测试代码:
List<int> testList = new List<int>();
for(int i = 0; i < 10000; i++)
{
testList.Add(i);
}
DateTime startTime = DateTime.Now;
for(int i = 0; i < 20000; i++)
{
if(testList.Contains(i))
{ }
}
Debug.Log(DateTime.Now - startTime + " : Contains");
startTime = DateTime.Now;
for(int i = 0; i < 20000; i++)
{
if(testList.Exists(item => item == i))
{ }
}
Debug.Log(DateTime.Now - startTime + " : Exists");
startTime = DateTime.Now;
for(int i = 0; i < 20000; i++)
{
if(testList.Any(item => item == i))
{ }
}
Debug.Log(DateTime.Now - startTime + " : Any");
startTime = DateTime.Now;
for(int i = 0; i < 20000; i++)
{
testList.FirstOrDefault(item => item == i);
}
Debug.Log(DateTime.Now - startTime + " : First");
startTime = DateTime.Now;
for(int i = 0; i < 20000; i++)
{
testList.Where(item => item == i).FirstOrDefault();
}
Debug.Log(DateTime.Now - startTime + " : Where");
startTime = DateTime.Now;
for(int i = 0; i < 20000; i++)
{
testList.Find(item => item == i);
}
Debug.Log(DateTime.Now - startTime + " : Find");
startTime = DateTime.Now;
for(int i = 0; i < 20000; i++)
{
for(int j = 0; j < testList.Count; j++)
{
if(i == testList[j])
break;
}
}
Debug.Log(DateTime.Now - startTime + " : For");
测试结果:
用List<string>再测一下:
List<string> testList = new List<string>();
for(int i = 0; i < 10000; i++)
{
testList.Add(i.ToString());
}
DateTime startTime = DateTime.Now;
for(int i = 0; i < 20000; i++)
{
if(testList.Contains("5000"))
{ }
}
Debug.Log(DateTime.Now - startTime + " : Contains");
startTime = DateTime.Now;
for(int i = 0; i < 20000; i++)
{
if(testList.Exists(item => item == "5000"))
{ }
}
Debug.Log(DateTime.Now - startTime + " : Exists");
startTime = DateTime.Now;
for(int i = 0; i < 20000; i++)
{
if(testList.Any(item => item == "5000"))
{ }
}
Debug.Log(DateTime.Now - startTime + " : Any");
startTime = DateTime.Now;
for(int i = 0; i < 20000; i++)
{
testList.FirstOrDefault(item => item == "5000");
}
Debug.Log(DateTime.Now - startTime + " : First");
startTime = DateTime.Now;
for(int i = 0; i < 20000; i++)
{
testList.Where(item => item == "5000").FirstOrDefault();
}
Debug.Log(DateTime.Now - startTime + " : Where");
startTime = DateTime.Now;
for(int i = 0; i < 20000; i++)
{
testList.Find(item => item == "5000");
}
Debug.Log(DateTime.Now - startTime + " : Find");
startTime = DateTime.Now;
for(int i = 0; i < 20000; i++)
{
for(int j = 0; j < testList.Count; j++)
{
if("5000" == testList[j])
break;
}
}
Debug.Log(DateTime.Now - startTime + " : For");
判断某元素是否在List内,List.Exists优于List.Contains。
从List中获取指定的元素,List.Find优于Linq,优于For循环。