您的位置:首页 > 其它

.net里面数组的复制

2008-01-24 12:36 211 查看
1、非零开始的2维数组复制到从零开始的2维数组

// 源数组[1001..1003,1001..1003]

for (int i = array1.GetLowerBound(0); i <= array1.GetUpperBound(0); i++)

for (int j = array1.GetLowerBound(1); j <= array1.GetUpperBound(1); j++)

array1.SetValue(new object(), i, j);

// 目标数组

object[,] array2 = new object[array1.GetLength(0), array1.GetLength(1)];

// 直接Copy,就这么简单,只是大家没想到

Array.Copy(array1, array1.GetLowerBound(0), array2, 0, array1.Length);

2、同样,每个维个数一样的情况下,非零开始的2维数组之间的复制

// 源数组[1..3,1..3]

for (int i = array1.GetLowerBound(0); i <= array1.GetUpperBound(0); i++)

for (int j = array1.GetLowerBound(1); j <= array1.GetUpperBound(1); j++)

array1.SetValue(new object(), i, j);

// 目标数组[1000..1002,1000..1002],每个维的个数一样的情况下

// 还是直接Copy

Array.Copy(array1, array1.GetLowerBound(0), array2, array2.GetLowerBound(0), array1.Length);

3、多维并且每个维数不同的情况(是不是从0开始的已经不重要了)

// 源数组[2,3],一共6个

int[,] array1 = new int[2, 3];

int temp = 0;

for (int i = 0; i < array1.GetLength(0); i++)

for (int j = 0; j < array1.GetLength(1); j++)

array1[i, j] = ++temp;

// 目标数组[3,2],一共6个

int[,] array2 = new int[3, 2];

// 还是直接Copy

Array.Copy(array1, 0, array2, 0, array1.Length);

看一下结果,发现array2里面是

array2[0,0]=1

array2[0,1]=2

array2[1,0]=3

array2[1,1]=4

array2[2,0]=5

array2[2,1]=6

也就是直接内存copy过去,所以,顺序还是1、2、3、4、5、6,无视每一维的长度(只要保证总长度就可以了)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: