如何存储一对ID,我可以检查我是否已经存储了它

本文关键字:存储 是否 检查 我可以 ID 何存储 | 更新日期: 2023-09-27 18:20:16

我有以下问题:

我有两对Id,比如:

1 3
3 1
1 2
...

然后我想把它存储在一些结构中,这样我就可以简单地检查我是否已经有了这个连接:1 3是存储的,所以当我得到3 1时,我会看到1 3存在,它会返回exist。然后我得到1 2,并且由于未存储1 22 1,所以我将不存在。

如何实现这一点,或者什么是一个好的结构?

如何存储一对ID,我可以检查我是否已经存储了它

听起来你想要这样的东西:

// You could turn this into a struct if you wanted.
public sealed class IdPair : IEquatable<IdPair>
{
    private readonly int first;
    private readonly int second;
    public int First { get { return first; } }
    public int Second { get { return second; } }
    public IdPair(int first, int second)
    {
        this.first = first;
        this.second = second;
    }
    public override int GetHashCode()
    {
        // This is order-neutral.
        // Could use multiplication, addition etc instead - the point is
        // that {x, y}.GetHashCode() must equal {y, x}.GetHashCode()
        return first ^ second; 
    }
    public override bool Equals(object x)
    {
        return Equals(x as IdPair);
    }
    public bool Equals(IdPair other)
    {
        if (other == null)
        {
            return false;
        }
        return (first == other.first && second == other.second) ||
               (first == other.second && second == other.first);
    }
}

那么你只需要一个HashSet<IdPair>。感觉这是一种比使用Dictionary更自然的方法,因为你实际上没有一个键——你只是有一对,其中两个属性都是同样类似键的,你基本上对对的顺序中立等式感兴趣。