需要帮助进行搜索优化

Mam*_*ate 6 c# optimization

我对编程很新,我需要一些优化方面的帮助.基本上我的方法的一部分做:

for(int i = 0; i < Tiles.Length; i++)
{
    x = Tiles[i].WorldPosition.x;
    y = Tiles[i].WorldPosition.y;
    z = Tiles[i].WorldPosition.z;

    Tile topsearch = Array.Find(Tiles,
        search => search.WorldPosition == Tiles[i].WorldPosition +
            new Vector3Int(0,1,0));

    if(topsearch.isEmpty)
    {
        // DoMyThing
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我正在寻找一个比当前Tile高1个单位的瓷砖.我的问题是,对于整个方法,它需要0.1秒,这导致一个小的hick up .. Array.Find没有方法是0.01秒.

我也尝试了一个for循环,但仍然不是很好的结果,因为我还需要3个底部,左侧和右侧的检查.

有人可以帮助我,并指出我获得一些快速结果的方法吗?也许我应该选择像线程一样的东西?

Roy*_*tus 9

您可以创建一个三维数组,这样您只需查看其中的内容即可在特定位置查找图块Tiles[x, y + 1, z].

然后,您可以在2个循环中遍历数据:一个用于构建Tiles,另一个用于执行上面代码中的检查,这将只是:

for(int i = 0; i < Tiles.Length; i++)
{
    Tile toFind = Tiles[Tile[i].x, Tile[i].y + 1, Tile[i].z];
    if (toFind != null) ...
}
Run Code Online (Sandbox Code Playgroud)

您必须对数组进行维度,以便在y中有1个额外的行,这样Tiles[x, y + 1, z]就不会导致索引超出范围的异常.

  • @Rotem,在这种情况下,你可以使用稀疏网格习语. (3认同)