我有一个字典,其中键由Vector2定义,我正在尝试执行涉及匹配Y值的键的函数。 (构建图表)
现在我正在使用两个foreach循环,一个用于遍历每个条目,第二个用于查找匹配条件的键。
foreach(KeyValuePair<Vector2, TransportData> entry in transportDictionary)
//for every value in dictionary
{
Vector2 forpos = entry.Key;
foreach(KeyValuePair<Vector2, TransportData> searchEntry in transportDictionary)
//go through every value in dictionary
{
if(searchEntry.Key.y == forpos.y && searchEntry.Key.x != forpos.x)
//if something is found with matching Y value, at a different X value as to not include itself
{
DoSomething(forpos, searchEntry.key);
//pass the two matched values as arguments
}
}
DoSomethingElse(forpos); //(functions need to be run on every entry individually too)
}
它有效,但效率非常高,我预测这本字典有超过一千个条目。通过50个条目的小测试集,此操作已经花费了不可接受的长时间。
如何优化此操作? (或者我做了一些根本错误的事情?)
如果它有助于查找方法,则此应用程序中每个Vector2的x和y坐标将始终为整数。
- edit-- 我需要在每个条目上运行一个函数,因此没有必要对起始字典进行子集化。
答案 0 :(得分:0)
一个想法是首先将您的transportDictionary过滤到只有至少有一个匹配Key.Y
的项目,然后只处理一个键列表(因为您似乎只需要这些) )。
然后您还可以将第二个foreach
更改为仅与具有Y
匹配的键进行比较,因此您不会循环遍历每个循环中的所有键:
最后,您还可以删除刚刚处理完的所有项目,因此您不会多次迭代它们(当然,我不知道{{1}如果你需要不止一次迭代匹配,那么这将不起作用):
DoSomething()