C#shift二维数组快速方法

时间:2011-09-27 19:25:34

标签: c# shift dimensional

我在C#中有一个2D字符串数组,我需要在一个维度上将该数组移到左边 我怎样才能以有效的方式做到这一点

我不想使用嵌套的,我想在O(n)而不是O(n 2

中使用algurithm
for (int i = 50; i < 300; i++)
{
    for (int j = 0; j < 300; j++)
    {
        numbers[i-50, j] = numbers[i, j];
    }
 }

2 个答案:

答案 0 :(得分:2)

最有效的方法是根本不改变它,而是改变你访问阵列的方式。例如,保留一个偏移量,告诉您第一列的维度在哪里。

答案 1 :(得分:2)

如果您想快速转移大量数据,请使用Array.Copy而不是复制单个字符的循环。

如果你交换到一个字节数组并使用Array.CopyBuffer.BlockCopy,你可能会更多地提高性能(但如果你必须转换为/从字符数组转换,你可能会失去你所有的一切)获得了。)

(编辑:现在您已经发布了示例代码):如果您使用对数组行的引用,那么您可以移动引用而不必移动数据本身。任何你仍然可以使用Array.Copy移动引用

但是如果你改变你的方法,所以你不需要改变数据,你将获得更好的性能 - 如果你可以避免它总是更快,根本不做任务!您可以将数据包装在一个访问器层中,该层可以跟踪数据的移位量,并修改索引以返回您所追踪的数据。 (这会稍微减慢对数据的访问速度,但可以节省您的数据转移,因此可能会带来净赢 - 取决于您相对于您移动的数量而获取的数量)