2017-03-29 21 views
1

Vector3リストの要素の重複を削除する必要があります。例については は、ここにリストです:重複した要素を削除するリスト<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)); 

あなたがこの問題を解決する方法を知っていますか?多分Linqが私を助けることができますか?

ありがとうございました!ここで

+0

この 'Vector3'クラスは何ですか?それはどこから来たのですか? – spender

+0

@spender 'Vector3'は、これらのUnity固有の構造体の1つです。基本的には3つの浮動小数点数(ヘルパーメソッドの束)です。 – Serlite

+0

@spender 'struct'はuntiyからです。 [Here](https://docs.unity3d.com/ScriptReference/Vector3.html)は、それがどのように見えるかです。 – Programmer

答えて

5

はあなたのソリューションは、あなたがトップあなたのコードにusing System.Linq;を追加している

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

注意です。

+0

VS 2015はVector3の.Distinct()を認識しません。そのためにディレクティブを使用する必要がありますか? – louis12356

+0

'System.Linqを使用してインポートする必要があります。 ' – Programmer

+0

mmh、これはこのようには見えません。 編集:小さなリストでは動作しますが、大きなものでは動作しません。 – louis12356

1

次の(ユニティドキュメントによると良いことです)LINQのあなたの使用を使用しない場合:

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

他のソリューションではなく、HashSetのコレクションを使用することです。これはそのコレクションの目的であり、重複は避けます。必要に応じてIEqualityComparerを実装する必要があります。

+0

このソリューションをありがとうございました! – louis12356

関連する問題