我正在使用一个大的兴趣点数据集(POI),它们都有Lat/Long值.
我想过滤掉彼此非常接近的POI.我认为要实现这一点,我可以将Lat/Long向下舍入到X小数位并按结果分组(或调用Distinct()或其他)...
我写了一个LINQ语句似乎没有做我想要的,
var l1 = (from p in PointsOfInterest where p.IsVisibleOnMap select p).Distinct(new EqualityComparer()).ToList();
Run Code Online (Sandbox Code Playgroud)
这里EqualityComparer是
public class EqualityComparer : IEqualityComparer<PointOfInterest>
{
public bool Equals(PointOfInterest x, PointOfInterest y)
{
return Math.Round(x.Latitude.Value, 4) == Math.Round(y.Latitude.Value, 4) &&
Math.Round(x.Longitude.Value, 4) == Math.Round(y.Latitude.Value, 4);
}
public int GetHashCode(PointOfInterest obj)
{
return obj.GetHashCode();
}
}
Run Code Online (Sandbox Code Playgroud)
但Equals方法似乎永远不会被称为?!?
有关最佳方法的任何想法吗?
Equals()永远不会被调用,GetHashCode()因为你GetHashCode()在System.Object类中定义了,因为为任何两个对象返回不同的值.您需要以不同的方式实现GetHashCode().
尝试类似的东西
public int GetHashCode(PointOfInterest obj)
{
return obj.Longitude.Value.GetHashCode() ^ obj.Latitude.Value.GetHashCode();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
882 次 |
| 最近记录: |