【发布时间】:2015-03-26 20:33:34
【问题描述】:
我有一个字典,其中键由 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 坐标将始终为整数。
--编辑-- 无论如何,我需要在每个条目上运行一个函数,因此没有必要对起始字典进行子集化。
【问题讨论】:
-
您似乎正在使用
==匹配一些数据。这就是字典的用途。为什么不使用TryGetValue和其他O(1) 方法? -
顺便说一句,对于性能问题Code Review 似乎是更好的地方。