我在C#中有一个2D字符串数组,我需要在一个维度上将该数组移到左边 我怎样才能以有效的方式做到这一点
我不想使用嵌套的,我想在O(n)而不是O(n 2 )
中使用algurithmfor (int i = 50; i < 300; i++)
{
for (int j = 0; j < 300; j++)
{
numbers[i-50, j] = numbers[i, j];
}
}
答案 0 :(得分:2)
最有效的方法是根本不改变它,而是改变你访问阵列的方式。例如,保留一个偏移量,告诉您第一列的维度在哪里。
答案 1 :(得分:2)
如果您想快速转移大量数据,请使用Array.Copy
而不是复制单个字符的循环。
如果你交换到一个字节数组并使用Array.Copy
或Buffer.BlockCopy
,你可能会更多地提高性能(但如果你必须转换为/从字符数组转换,你可能会失去你所有的一切)获得了。)
(编辑:现在您已经发布了示例代码):如果您使用对数组行的引用,那么您可以移动引用而不必移动数据本身。任何你仍然可以使用Array.Copy移动引用
但是如果你改变你的方法,所以你不需要改变数据,你将获得更好的性能 - 如果你可以避免它总是更快,根本不做任务!您可以将数据包装在一个访问器层中,该层可以跟踪数据的移位量,并修改索引以返回您所追踪的数据。 (这会稍微减慢对数据的访问速度,但可以节省您的数据转移,因此可能会带来净赢 - 取决于您相对于您移动的数量而获取的数量)