你最好的选择是使用类似的东西List<int>
而不是数组。但是如果你必须使用一个数组:
int[] arr1 = new int[200];
// initialize array
int[] arr2 = new int[]{999, 999, 999, 999, 999};
int targetPos = 20;
// resizes the array, copying the items
Array.Resize(ref arr1, arr1.Length + arr2.Length);
// move the tail of the array down
Buffer.BlockCopy(arr1, 4*targetPos, arr1, 4*(targetPos+arr2.Length), 4*(arr1.Length - targetPos));
// copy arr2 to the proper position
Buffer.BlockCopy(arr2, 0, 4*arr1.targetPos, 4*arr2.Length);
像这样创建一个新数组并复制项目可能会更快。
int[] newArray = new int[arr1.Length + arr2.Length];
// copy first part of original array
Buffer.BlockCopy(arr1, 0, newArray, 0, 4*targetPos);
// copy second array
Buffer.BlockCopy(arr2, 0, newArray, 4*targetPos, 4*arr2.Length);
// copy remainder of original array
Buffer.blockCopy(arr1, 4*targetPos, newArray, 4*(targetPos + arr2.Length), 4*(arr1.Length - targetPos));
// and replace the original array
arr1 = newArray;
哪个版本更快将取决于在哪里targetPos
。第二个版本在小的时候会更快targetPos
。小的时候targetPos
,第一个版本要复制很多数据两次。第二个版本从不复制超过它必须复制的内容。
BlockCopy
使用起来有点痛苦,因为它需要字节偏移量,这就是代码中所有乘以 4 的原因。在上面的第二个版本中使用Array.Copy可能会更好。这将防止您必须将所有内容乘以 4(有时会忘记)。