Unity3d 有没有更好的方法在tilemap中查找非空tile?

Unity3d 有没有更好的方法在tilemap中查找非空tile?,unity3d,Unity3d,所以我的做法是O(n)解决方案: public static int GetNumberOfTiles(Tilemap tilemap) { tilemap.CompressBounds(); TileBase[] tiles = tilemap.GetTilesBlock(tilemap.cellBounds); return tiles.Where(x => x != null).ToArray().Length; }

所以我的做法是O(n)解决方案:

public static int GetNumberOfTiles(Tilemap tilemap)
    {
        tilemap.CompressBounds();
        TileBase[] tiles = tilemap.GetTilesBlock(tilemap.cellBounds);
        return tiles.Where(x => x != null).ToArray().Length;
    }
对于O(1)或更少的代码,有没有办法做到这一点?


你不能比至少看一次每张瓷砖更快地看每张瓷砖。

如果你自己放置/移除瓷砖,那么你就可以跟踪计数。。此外,LINQ+toarray在计数方面可能比manual for loop稍微慢一些。@mgear如果正确,
.Count(…)
会更好,当然可以手动跟踪添加/删除(取决于他的用例)。但除非出现性能问题,否则这两个更改几乎毫无意义。to数组部分的最坏情况时间复杂度仅为O(n),与
中的O(n)相结合,但O(n)+O(n)=O(n)