如何过滤掉重复数据?

快跑稻草人 2018-12-16 01:35:37
我想做这样一个程序,有一个包含很多点(x,y)的List,变量名为source,我想获取到其中所有相邻的点,做了如下的程序:
public List<Point> FindNextPoint(List<Point> source, Point point, List<Point> findedPoints)
{
List<Point> result = new List<Point>();
result.Add(point);
findedPoints.Add(point);
List<Point> points = source.FindAll(
delegate (Point i)
{
return (Math.Abs(i.X - point.X) <= 2 && Math.Abs(i.Y - point.Y) <= 2) && !findedPoints.Contains(i);
}
);
result.AddRange(points);
findedPoints.AddRange(points);
for (int i = 0; i < points.Count; i++)
{
List<Point> findPoints = FindNextPoint(source, points[i], findedPoints);
result.AddRange(findedPoints);
}
return result;
}

p是所有点的列表,areas是获取的所有相邻的点的集合,但是这个获取的过程中,总是有很多重复的点。
for (int i = 0; i < p.Count; i++)
{
if (findedPoints.Contains(p[i])) continue;

first = FindNextPoint(p, p[i], findedPoints);

if (first.Count <= 0) continue;

Point[] item = (Point[])first.ToArray().Clone();

areas.Add(item.ToList());
first.Clear();
}


请问应该如何去掉这些重复的点?
...全文
240 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
FainSheeg 2018-12-18
  • 打赏
  • 举报
回复
试试哈希表吧,把所有item添加到hashset里,自然就没有重复的了。
关中山水郎 2018-12-17
  • 打赏
  • 举报
回复
Contains<>也可以判断是否包含集合, if (!result.Contains<Point>(points[0])){}
csdnFUCKINGSUCKS 2018-12-17
  • 打赏
  • 举报
回复

var result = areas.Aggregate((a, b) => a.Union(b).ToList()).ToList();
xuzuning 2018-12-16
  • 打赏
  • 举报
回复
已知 areas 是点的集合
则 areas = areas.Distinct().ToList();

但按你 areas.Add(item.ToList()); 这个写法
areas 不是 List<Point> 而是 List<List<Point>>,Distinct() 就无能为力了

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧