2017-03-29 1 views
1

Je dois supprimer les doublons d'éléments dans ma liste Vector3. Par exemple, voici une liste:Supprimer les éléments dupliqués Liste <Vector3> Mono/C# - Unity3D

List<Vector3> PointsToGo = new List<Vector3>(); 

PointsToGo.Add(new Vector3(1, 1, 1)); 
PointsToGo.Add(new Vector3(2, 2, 2)); 
PointsToGo.Add(new Vector3(1, 1, 1)); // Get this one or the first one out 
PointsToGo.Add(new Vector3(4, 4, 4)); 

Savez-vous comment résoudre ce problème? Peut-être que Linq peut m'aider?

Merci pour votre réponse!

+0

Qu'est-ce que cette classe 'Vector3'? D'où est ce que ça vient? – spender

+0

@spender 'Vector3' est l'une de ces structures spécifiques à Unity - essentiellement 3 flottants (et un tas de méthodes auxiliaires). – Serlite

+0

@spender Une 'struct' de untiy. [Ici] (https://docs.unity3d.com/ScriptReference/Vector3.html) est ce à quoi il ressemble. – Programmer

Répondre

5

Voici votre solution

PointsToGo = PointsToGo.Distinct().ToList(); 

Notez que vous avez ajouter using System.Linq; au sommet de votre code.

+0

VS 2015 ne connaît pas le .Distinct() pour Vector3. Ai-je besoin d'une directive d'utilisation pour cela? – louis12356

+0

Vous devez importer 'using System.Linq;' – Programmer

+0

mmh, il ne ressemble pas que cela fonctionne - je l'essaie avec une plus petite liste maintenant. edit: cela fonctionne sur une petite liste, mais pas dans ma grande liste. – louis12356

1

Si vous ne souhaitez pas utiliser LINQ (ce qui est une bonne chose selon l'unité doc) vous une utilisez les touches suivantes:

List<Vector3> list = new List<Vector3>(new HashSet<Vector3>(originalListWithDuplicate)); 

L'autre solution consiste à utiliser à la place collection HashSet. C'est le but de cette collection, en évitant les doublons. Vous devrez peut-être implémenter IEqualityComparer pour qu'il se comporte exactement comme vous en avez besoin.

+0

Merci pour cette solution !! – louis12356