我在许多SubClassess中扩展了SuperClass Tile
,例如GroundTile
,WallTile
,TrapTile
等。
在另一个类中,让我们调用它Main
,我可以使用一个函数来检索这些类的所有实例作为数组。
Main(){
void MyFunctionThatDoesThings(){
GroundTile[] grounds = FindObjectsOfType<GroundTile>();
WallTile[] walls = FindObjectsOfType<WallTile>();
// ... *same code but for other Classes* ...
Tile[] tiles = FindObjectsOfType<Tile>();
// ... etc
}
}
我需要做的是从tiles
数组中过滤其他数组中尚不存在的元素。
除了通过tiles
数组循环之外,还有一种方法(或Linq方法)可以做到这一点,检查当前元素是否等于其他数组中的任何元素,如果没有保留它,否则删除它? / p>
答案 0 :(得分:1)
Tile[] tiles = FindObjectsOfType<Tile>().Except(
Enumerable.Empty<Tile>()
.Concat( grounds )
...
.Concat( walls ) ).ToArray();
答案 1 :(得分:1)
如果你已经将每个数组存储在上面显示的自己的变量中,那么你可以使用Except()
扩展方法(来自{{}的方法过滤掉其他数组。 1}})。
然后你可以做类似的事情:
using System.Linq;
答案 2 :(得分:0)
如果我理解正确的话,这可能就是一个例子:
@user.cart
答案 3 :(得分:0)
一种方法是使用LINQ。 假设您有一个ID来标识特定对象。
GroundTile[] grounds = FindObjectsOfType<GroundTile>();
WallTile[] walls = FindObjectsOfType<WallTile>();
// ... *same code but for other Classes* ...
Tile[] tiles = FindObjectsOfType<Tile>();
var existingTiles = grounds.Union(walls);
tiles = tiles.Where(t => existingTiles.All(e => e.ID != t.ID)).ToArray();