通过标准查找匹配向量的有效方法

时间:2015-03-26 20:33:34

标签: c# search vector

我有一个字典,其中键由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-- 我需要在每个条目上运行一个函数,因此没有必要对起始字典进行子集化。

1 个答案:

答案 0 :(得分:0)

一个想法是首先将您的transportDictionary过滤到只有至少有一个匹配Key.Y的项目,然后只处理一个键列表(因为您似乎只需要这些) )。

然后您还可以将第二个foreach更改为仅与具有Y匹配的键进行比较,因此您不会循环遍历每个循环中的所有键:

最后,您还可以删除刚刚处理完的所有项目,因此您不会多次迭代它们(当然,我不知道{{1}如果你需要不止一次迭代匹配,那么这将不起作用):

DoSomething()