我有一个积分列表.我正在申请:
var result = neighbors.SelectMany(element => GenerateNeighbors(element)).Distinct<Point3D>().ToList<Point3D>();
Run Code Online (Sandbox Code Playgroud)
从该列表的每个点生成所有邻居.但我有另一个列表与其他点,这个邻居生成可以生成已经添加到那个点.
如何从结果列表中删除其他列表中的重复元素?任何带有一些谓词的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;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用Linq Except()扩展方法:
result = result.Except(otherList).ToList();
Run Code Online (Sandbox Code Playgroud)
你的Point3D类应该提供Equals/ 的适当实现GetHashCode(是的,你必须实现它,抛出一个NotImplementedException将无法工作)或实现(更明确)IEquatable<Point3D>使其工作,或者你可以将自定义IEqualityComparer作为第二个参数传递给Except()
| 归档时间: |
|
| 查看次数: |
802 次 |
| 最近记录: |