C# 每次将重复对象添加到HashSet时调用方法
我正在使用HashSet创建一个点列表,因为我不希望列表中有重复的点。点有三个属性X坐标(double)、Y坐标(double)和标记(HashSet)。现在我想要的是,每当我在HashSet中添加重复点时,它也会将重复点的标记添加到匹配点 代码 输出我想要的C# 每次将重复对象添加到HashSet时调用方法,c#,class,hashset,C#,Class,Hashset,我正在使用HashSet创建一个点列表,因为我不希望列表中有重复的点。点有三个属性X坐标(double)、Y坐标(double)和标记(HashSet)。现在我想要的是,每当我在HashSet中添加重复点时,它也会将重复点的标记添加到匹配点 代码 输出我想要的 Point2DHashSet需要一个Add,该Add执行以下自定义逻辑:“如果对象已存在,请将传入点的标记添加到现有points标记hashset。您不能在派生集中替换基Add,因为基Add不是虚拟的,但您可以隐藏它: public ne
Point2DHashSet需要一个Add,该Add执行以下自定义逻辑:“如果对象已存在,请将传入点的标记添加到现有points标记hashset。您不能在派生集中替换基Add,因为基Add不是虚拟的,但您可以隐藏它:
public new bool Add(Point2D incoming){
if(base.TryGetValue(incoming, out var existing))
existing.Tags.UnionWith(incoming.Tags);
else
base.Add(incoming);
}
我想这就是你需要的
但是需要注意的是,您不会得到重复的标记,并且标记也不一定会按添加的顺序出现。您的输出可以很容易地成为当前解决方案的0,0,End,Start
public new bool Add(Point2D point)
{
var sucess = base.Add(point);
if (!sucess)
{
UpdateTags(point);
}
return sucess;
}
private void UpdateTags(Point2D point)
{
TryGetValue(point, out Point2D pt);
pt.Tags.UnionWith(point.Tags);
}
TryGetValue value不适用于.Net Standard 2任何可用的替代方案?呃,老实说,在这种情况下,我想我应该扔掉HashSet,使用
字典
,其中键是Point2D,值对象总是空的,或者升级一个级别,使用字典
,让Point2D只有一个字符串而不是HashSet目标hear是将多个几何体分开,并在最后合并,它们的标记对维持顺序很重要?顺序不重要,但对于打印,我应该能够按x或y坐标对其进行排序
0,0,Start,End
10,0,Int1
10,10,Int2
0,10,Int3
public new bool Add(Point2D incoming){
if(base.TryGetValue(incoming, out var existing))
existing.Tags.UnionWith(incoming.Tags);
else
base.Add(incoming);
}
public new bool Add(Point2D point)
{
var sucess = base.Add(point);
if (!sucess)
{
UpdateTags(point);
}
return sucess;
}
private void UpdateTags(Point2D point)
{
TryGetValue(point, out Point2D pt);
pt.Tags.UnionWith(point.Tags);
}