我在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];
}
}
如果您想快速移动大量数据,请使用Array.Copy
而不是复制单个字符的循环。
如果你切换到字节数组并使用Array.Copy
或Buffer.BlockCopy
,你可能会提高性能一点(但如果你必须转换为字符数组,你可能会失去你所获得的一切)。
(编辑:现在你已经发布了示例代码):如果你使用引用到数组行,那么你可以移动引用,而不必移动数据本身。你仍然可以使用Array.Copy)
来移动引用但是如果你改变你的方法,这样你就不需要移动数据,你将获得相当好的性能——如果你可以避免的话,根本不做任何工作总是更快!您可能会将数据包装在访问器层中,该访问器层跟踪数据移动的程度,并修改索引以返回所需的数据。(这将稍微减慢对数据的访问速度,但节省了您移动数据的时间,因此可能会产生净收益——这取决于您访问的数据量相对于您移动的数据量)
最有效的方法是根本不移动它,而是改变访问数组的方式。例如,保留一个偏移量,告诉您第一列在维度中的位置。