0

我正在构建一个图形并验证要添加的顶点的唯一性HashSet<T>。如果尚未添加项目,则其方法 Add() 返回 true。

我可以对边缘使用什么技术?我需要验证是否添加了一次 AB 对或 BA 对。

这是我正在使用的数据的轻量级版本:

interface INode
{
    INode[] Previous { get; }

    Node Next { get; }
}

然后我有:

INode current;
INode[] allPrevious = ExternalMethod1(current);
INode[] allNext = ExternalMethod2(current);

所以我不能在递归的时候建立一个图,我已经存储了所有的数据来迭代。

4

1 回答 1

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();
    }
}

当然,您还必须检查无效性。所有标准警告也适用于GetHashCode实现。

于 2012-06-21T08:02:43.427 回答