如果与另一个Array中的元素进行比较,则从Array中删除重复的元素

时间:2017-05-22 20:32:57

标签: c# arrays linq unity5

我在许多SubClassess中扩展了SuperClass Tile,例如GroundTileWallTileTrapTile等。
在另一个类中,让我们调用它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>

4 个答案:

答案 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();