Ugu*_*maz 3 c# list duplicates
我有一个列表,包括基于x和y位置的一堆位置,我正在采取两个位置的差异.因此,例如我有重复,如(0,1),(1,0)和(1,2),(2,1)和(2,3),(3,2).我想删除列表中的所有重复项以实现我的目标.是否有捷径可寻?我一直在尝试构建算法,但这很难.因为我有90个位置,并且不容易确定何时复制自己
最简单的方法是创建一个IEqualityComparer为你点一类,没有关心你的顺序X和Y,然后你可以使用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)
| 归档时间: |
|
| 查看次数: |
359 次 |
| 最近记录: |