收到的值不是理想的结果

时间:2018-01-20 15:37:14

标签: c# arrays jagged-arrays

我有一个名为gMul的锯齿状数组,其中有4个数组,我想取第一个数据,所有其他数组等于该数组移位n次(n表示它们在锯齿状数组中的索引)< / p>

由于某种原因,最后一个数组等于它之前的数组,例如:

gMul[0] = new byte[] {2 , 3 , 2 , 2}

然后结果应该是

gMul[0] - {2 , 3 , 2 , 2}
gMul[1] - {2 , 2 , 3 , 2}
gMul[2] - {2 , 2 , 2 , 3}
gMul[3] - {3 , 2 , 2 , 2}

但由于某种原因,我得到的结果是:

gMul[0] - {2 , 3 , 2 , 2}
gMul[1] - {2 , 2 , 3 , 2}
gMul[2] - {2 , 2 , 2 , 3}
gMul[3] - {2 , 2 , 2 , 3}

我的代码:

for (int i = 1; i < gMul.GetLength(0); i++)
{
    //shift is a function that shifts the given array one item to the right 
    //and returns an array of bytes
    byte[] shifted = shift(gMul[i - 1]); 
    gMul[i] = shifted;
}

public byte[] shift(byte[] row)
    {

        byte tmp = row[0];
        for (int i = row.Length - 1; i >= 0; i--)
        {
            row[(i + 1) % row.Length] = row[i];

        }
        row[1] = tmp;
        return row;
    }

1 个答案:

答案 0 :(得分:0)

问题在于移位算法。正确的算法是这个

public byte[] ShiftRight(byte[] row)
{
    var newRow = new byte[row.Length];
    byte tmp = row[row.Length - 1];
    for(int i = row.Length - 1; i > 0; i--)
    { 
       newRow[i] = row[i - 1]; 
    }
    newRow[0] = tmp; 
    return newRow; 
}

或者只使用Array.Copy。

public byte[] ShiftRight(byte[] row)
{
    var newRow = new byte[row.Length];
    byte tmp = row[row.Length - 1];
    Array.Copy(row, 0, newRow, 1, row.Length - 1);
    newRow[0] = tmp; 
    return newRow;
}