c#二维数组快速移位方法

本文关键字:方法 二维数组 | 更新日期: 2023-09-27 18:09:44

我在c#中有一个2D字符串数组,我需要在一维中向左移动该数组我怎样才能有效地做到这一点呢

我不想使用嵌套的for,我想要一个O(n)而不是O(n2)

的算法
for (int i = 50; i < 300; i++)
{
    for (int j = 0; j < 300; j++)
    {
        numbers[i-50, j] = numbers[i, j];
    }
 }

c#二维数组快速移位方法

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

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

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

来移动引用

但是如果你改变你的方法,这样你就不需要移动数据,你将获得相当好的性能——如果你可以避免的话,根本不做任何工作总是更快!您可能会将数据包装在访问器层中,该访问器层跟踪数据移动的程度,并修改索引以返回所需的数据。(这将稍微减慢对数据的访问速度,但节省了您移动数据的时间,因此可能会产生净收益——这取决于您访问的数据量相对于您移动的数据量)

最有效的方法是根本不移动它,而是改变访问数组的方式。例如,保留一个偏移量,告诉您第一列在维度中的位置。