我有一个积分列表。我正在申请:
var result = neighbors.SelectMany(element => GenerateNeighbors(element)).Distinct<Point3D>().ToList<Point3D>();
从此列表的每个点生成所有邻居。但是我有另一个列表和其他点,这个邻居生成可以生成已添加到那个点的点。
如何从结果列表中删除其他列表中重复的元素?任何带有一些谓词的linq函数我可以用来改进它吗?
非常感谢!
修改 新代码:
class Point3D : IEquatable<Point3D>
{
public int X { get; set; }
public int Y { get; set; }
public int Z { get; set; }
public bool visited { get; set; }
public int life { get; set; }
public Point3D(int _x, int _y, int _z)
{
this.X = _x;
this.Y = _y;
this.Z = _z;
this.visited = false;
this.life = 2;
}
public int GetHashCode(Point3D obj)
{
throw new NotImplementedException();
}
public override Boolean Equals(object o)
{
if (!(o is Point3D)) return false;
return Equals((Point3D)o);
}
public Boolean Equals(Point3D p)
{
return Equals(this, p);
}
public static Boolean Equals(Point3D a, Point3D b)
{
return a.X == b.X && a.Y == b.Y && a.Z == b.Z;
}
}
答案 0 :(得分:5)
您可以使用Linq Except()
扩展方法:
result = result.Except(otherList).ToList();
您的Point3D
课程应提供Equals
/ GetHashCode
的适当实施(是的,您必须实施它,抛出NotImplementedException
将无效)或实现(更明确)IEquatable<Point3D>
,以实现此目的,或者您可以将自定义IEqualityComparer
作为第二个参数传递给Except()