之前我没有使用过很多lambda表达式,我遇到了一个案例,我认为我可以使用一个.我有一个约19,000条记录的自定义列表,我需要查看列表中是否存在记录,因此不是编写一堆循环或使用linq来查看列表,我决定尝试这样做:
for (int i = MinX; i <= MaxX; ++i)
{
tempY = MinY;
while (tempY <= MaxY)
{
bool exists = myList.Exists(item => item.XCoord == i && item.YCoord == tempY);
++tempY;
}
}
Run Code Online (Sandbox Code Playgroud)
唯一的问题是执行需要大约9到11秒.我做错了什么,这只是我不应该使用这样的表达式的情况?
谢谢.
编辑:抱歉.我应该详细说明.我正在创建一个带有for和while循环的记录列表,并检查myList中是否存在该记录.这是我能想到的唯一方法.我会重新评估它,看看我带来了什么.
Eri*_*ert 12
这段代码对我没有意义,所以很难说你是否做错了.赔率是好的,是的,你做错了.
试试这个,而不是显示代码.假设你有一个方法完全符合你的要求.该方法的签名是什么?不是身体,只是签名.
例如,假设你想问一个问题"这个点列表是否包含特定点?" 那么签名就是
bool Contains(List<Point> list, Point p)
Run Code Online (Sandbox Code Playgroud)
假设你想问一个问题"这个点列表是否包含这个矩形内的任何点?" 那么签名就是
bool ContainsAny(List<Point> list, Rectangle r)
Run Code Online (Sandbox Code Playgroud)
假设您想问一个问题"这两个列表的共同点是什么?" 那么签名就是
List<Point> Intersection(List<Point> l1, List<Point> l2)
Run Code Online (Sandbox Code Playgroud)
等等.说明您要做的更清楚,我们可以帮助您优化操作.从签名开始.
这不是lambda的问题,这是你的算法的一个问题.你是从MinX到MaxX的循环,这是多少?然后你从MinY到MaxY循环,然后你循环~19,000条记录.因此,如果X循环为10且y循环为10,那么您将进行19,000*10*10次调用.可能会更糟糕.