如何删除c#列表中的重复项

Ugu*_*maz 3 c# list duplicates

我有一个列表,包括基于x和y位置的一堆位置,我正在采取两个位置的差异.因此,例如我有重复,如(0,1),(1,0)和(1,2),(2,1)和(2,3),(3,2).我想删除列表中的所有重复项以实现我的目标.是否有捷径可寻?我一直在尝试构建算法,但这很难.因为我有90个位置,并且不容易确定何时复制自己

Sco*_*ain 7

最简单的方法是创建一个IEqualityComparer为你点一类,没有关心你的顺序XY,然后你可以使用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();
    }
}
Run Code Online (Sandbox Code Playgroud)