C# 索引协调最佳实践?按位运算与模和除法

C# 索引协调最佳实践?按位运算与模和除法,c#,unity3d,C#,Unity3d,在使用unity构建2D游戏时,我开始使用以下代码索引我的瓷砖坐标,以便在字典中轻松访问: Public class Coordinate { private short[] coordinate = new Int16[2]; public Coordinate(In16 x, Int16 y)[...] public Int16 x {[...]} public Int16 y {[...]} public Int32 Key {

在使用unity构建2D游戏时,我开始使用以下代码索引我的瓷砖坐标,以便在字典中轻松访问:

Public class Coordinate
{
    private short[] coordinate = new Int16[2];

    public Coordinate(In16 x, Int16 y)[...]
    public Int16 x {[...]}
    public Int16 y {[...]}

    public Int32 Key
    {
        get{
            return ((Int32)(y << 16) ^ x);
        }
    }

    public static void Coordinate(Coordinate coordinate, Int32 index)
    {
        coordinate.X = (Int16)(index >> 16);
        coordinate.y = (Int16)index;
    }
}

我的问题是:
这两种方法中有哪一种在不同平台上移植更安全,还是仅仅是一种更好的做法?如果是,我想知道具体情况

使用Lsl或lsr不是一个好的实践,因为每个人都不了解它是如何工作的,即使它比其他解决方案快

分区是最糟糕的解决方案,因为它对计算机来说不是自然的,而且可能需要很多时间(是的,不到1毫秒,但时间太多了)。想象一下,如果你有一个等于0的映射

我不知道模,但我认为这是一个不错的解决方案

乘法可以是最好的解决方案,也可以是最坏的解决方案。它取决于数字(2^x=最佳解决方案,(2^x)-1=最差解决方案(我认为这适用于臂装配) 这就像乘以3。在汇编中,你应该乘以2,然后把数字相加。 x*3=x*2+x。对人类来说是一样的,对计算机来说不是。 也许是因为编译器比过去更聪明,才做出了这种转变


在这种情况下,我认为乘法是最好的解决方案。只需更改是的,我很难创建一个扩展方法来创建索引,但为了避免混淆我自己,我更喜欢创建一个单独的类型。为什么需要从它创建索引?只需使用
向量
作为键。我的想法是使用为了速度和序列化目的,使用整数来索引某些内容更好谢谢!这就是我想要的答案。它帮助我更好地理解。
int index = y * mapWidth + x;
int x = index % mapWidth;
int y = index / mapWidth;