我正在使用HashSet<T>
构建图表并验证要添加的顶点的唯一性。如果尚未添加项目,则其方法Add()将返回true。
边缘可以使用哪种技术?我需要验证对A-B或对B-A对是否加了一次。
这是我正在使用的数据的轻量级版本:
interface INode
{
INode[] Previous { get; }
Node Next { get; }
}
然后我有:
INode current;
INode[] allPrevious = ExternalMethod1(current);
INode[] allNext = ExternalMethod2(current);
因此我无法在递归循环时构建图形,我将所有数据存储起来以进行迭代。
答案 0 :(得分:2)
为边创建自己的相等比较器实现,并将HashSet<T>.Comparer
设置为它的实例。例如:
class Edge
{
public string From { get; set; }
public string To { get; set; }
}
class EdgeEqualityComparer : IEqualityComparer<Edge>
{
public bool Equals(Edge lhs, Edge rhs)
{
return (lhs.From.Equals(rhs.From) && lhs.To.Equals(rhs.To)) ||
(lhs.From.Equals(rhs.To) && lhs.To.Equals(rhs.From));
}
public int GetHashCode(Edge e)
{
return e.From.GetHashCode() ^ e.To.GetHashCode();
}
}
当然,您还必须检查无效。所有standard caveats也适用于GetHashCode
实施。