リストはxとyの場所に基づいて複数の場所で構成されており、2つの場所の違いをとっています。例えば、私は(0,1)、(1,0)と(1,2)、(2,1)と(2,3)、(3,2)のような重複を持っています。私は私の目標を達成するために私のリストからそれらのすべての重複を削除したい。これを行う簡単な方法はありますか?私はアルゴリズムを構築しようとしていますが、かなり難しいです。私は、90箇所のように持っているとC#のリストで重複を削除する方法
3
A
答えて
2
自身を複製したときに、私は、ロジック用のカスタムcomparererでEnumerable.Distinct
を使用するかを決定することは容易ではないので:
public class OppositeLocationsEqualComparer : IEqualityComparer<Location>
{
public bool Equals(Location l1, Location l2)
{
if (object.ReferenceEquals(l1, l2)) return true;
if (l1 == null || l2 == null) return false;
return (l1.X == l2.X && l1.Y == l2.Y) || (l1.X == l2.Y && l1.Y == l2.X);
}
public int GetHashCode(Location l)
{
if(l == null) return int.MinValue;
return Math.Abs(l.X - l.Y);
}
}
今、あなたはEnumerable.Distinct
(および他の多くを使用することができますこの比較演算子とLINQのメソッド):
List<Location> uniqueLocations = locationList
.Distinct(new OppositeLocationsEqualComparer())
.ToList();
7
最も簡単な解決策は、あなたのX
との順番を気にしないあなたのポイントクラスのIEqualityComparer
を作成することですでは、Distinct
を使用して重複を取り除くことができます。
public class MyPoint
{
public int X { get; set; }
public int Y { get; set; }
}
public class PointComparer : IEqualityComparer<MyPoint>
{
public bool Equals(MyPoint x, MyPoint y)
{
if (ReferenceEquals(x, y)) return true;
if (ReferenceEquals(x, null)) return false;
if (ReferenceEquals(y, null)) return false;
return (x.X == y.X && x.Y == y.Y) ||
(x.X == y.Y && x.Y == y.X);
}
public int GetHashCode(MyPoint obj)
{
return (obj?.X.GetHashCode() ?? 0)^(obj?.Y.GetHashCode() ?? 0);
}
}
class Program
{
static void Main()
{
List<MyPoint> data = GetDataFromSomewhere();
var singularData = data.Distinct(new PointComparer()).ToList();
}
}
関連する問題
- 1. 重複の削除方法重複を削除しない
- 2. 巨大なpythonリストで重複を削除する方法
- 3. リスト内の重複を削除する
- 4. リスト内の重複するオブジェクトを削除する(C#)
- 5. ベクトルで重複を削除する方法(ソートせずに)C++
- 6. リストから重複を削除する方法
- 7. リスト内の重複を削除する(C#)
- 8. リストから重複を削除するC#メソッド<T>
- 9. C#リストから重複とオリジナルを削除する
- 10. リスト内で重複するキー値のペアを削除する方法
- 11. C#でのコードの重複の削除
- 12. リスト(Of T)から重複を削除
- 13. Cでタプルのリストで重複を見つけて削除する#
- 14. Rで列の値で重複行を削除する方法
- 15. C#でXMLから重複する属性を削除する方法
- 16. タプルのリストで重複を削除するには
- 17. Viewsで重複するタイトルを削除する方法Drupal 6?
- 18. Gitで重複するファイルトラッキングを削除する方法
- 19. MYSQLデータベースで同様の重複を削除する方法
- 20. 配列の配列で重複を削除する方法Ruby
- 21. リストのリストから重複を削除しますか?
- 22. Cで重複したコードを削除する最も良い方法#
- 23. 削除重複
- 24. Pythonで重複したURLを削除する(非リスト)
- 25. PHPで重複IPを削除する方法
- 26. リストのリストの重複をPythonで減らすことによって削除する方法
- 27. cの文字列から重複を削除する方法は?
- 28. 重複の削除
- 29. MVCのリストから重複するタイトルを削除します
- 30. Pythonの:リスト内の重複する項目を削除
1つ以外のすべてを削除しますか? –
いいえ、私は違いを取っており、同じ結果を与えるので、反対の場所を削除したいと思います。したがって、私が(0,1)と(1,0)を持っているなら、私は(1,0)を取り除きたいです。 @TimSchmelter –
(1,0)と(0,1)はどのように重複していますか? –