0

我有两种这样的方法

HashSet<Tuple<int,int>> _xyPairs = new HashSet<Tuple<int,int>>();
private void SetTravelled(int x, int y, bool travelled)
{
    var t = new Tuple<int, int>(x, y);

    if (travelled)
        _xyPairs.Add(t);
    else
        _xyPairs.Remove(t);
}

private bool HaveTravelled(int x, int y)
{
    return _xyPairs.Contains(new Tuple<int, int>(x, y));
}

我不太介意第一种方法,因为它不经常被调用。然而,第二种方法被非常频繁地调用。所以我必须一遍又一遍地创建新的元组。

有没有办法将两个整数组合成一个哈希集的值?

4

1 回答 1

2

如果您有迹象表明元组实际上给您带来了问题,您可以尝试将两个 32 位整数组合成一个 64 位整数:

HashSet<long> _xyPairs = new HashSet<long>();

private void SetTravelled(int x, int y, bool travelled)
{
    var t = Combine(x, y)
    ...

private bool HaveTravelled(int x, int y)
{
    return _xyPairs.Contains(Combine(x, y));
}

private static long Combine(int x, int y)
{
    return (long)(((ulong)x) | ((ulong)y) << 32);
}
于 2013-02-03T20:54:00.293 回答