0

このような2つの方法があります

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

最初の方法はあまり呼び出されないので、あまり気にしません。ただし、2 番目のメソッドは非常に頻繁に呼び出されます。そのため、新しいタプルを何度も作成する必要があります。

2 つの整数を Hashset の 1 つの値に結合する方法はありますか?

4

1 に答える 1

2

タプルが実際に問題を引き起こしている兆候がある場合は、2 つの 32 ビット整数を 1 つの 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 に答える