如果您确实需要使用普通数组并使用复制它们的内容Array.Copy
(这不是 .NET 中处理事物的常用方法),那么首先使用笔并写下您尝试复制的数组部分的正确索引和长度.
在您知道如何解决之前开始编写解决方案不会让您走得太远。
所以,从一个示例数组和一个随机索引开始:
// starting array
int[] array = { 0, 1, 2, 3, 4, 5, 6, 7 };
// index to remove
int indexToRemove = new Random().Next(array.Length);
现在,假设indexToRemove
是3
并尝试手动完成:
- 第 1 部分:(
{ 0, 1, 2 }
开始 = 0
,长度 = 3
)
- 第 2 部分:(
{ 4, 5, 6, 7 }
开始 = 4
,长度 = 4
)
从这个具体的例子中,您可以尝试推断出这两个数组部分的偏移量和长度的通用公式:
- 第 1 部分:开始 =
0
,长度 =(indexToRemove - 1)
- 第 2 部分:开始 =
(indexToRemove + 1)
,长度 =(array.Length - indexToRemove - 1)
代码本身就是微不足道的:
var len = array.Length;
var newArray = new int[len - 1];
Array.Copy(array, 0, newArray, 0, indexToRemove - 1);
Array.Copy(array, indexToRemove + 1, newArray, indexToRemove, len - indexToRemove - 1);
此外,Array.Copy
可用于将数组的一部分复制到自身之上,这意味着您只需将数组的第二部分向后移动一个位置,然后使用以下命令调整初始数组的大小Array.Resize
:
// do not create a new array, but simply "move" the 2nd part to left
Array.Copy(array, indexToRemove + 1, array, indexToRemove, len - indexToRemove - 1);
// finally, resize the original array
Array.Resize(ref array, array.Length - 1);
当然,如果您只是使用 a List<int>
,那么您只需使用该List<T>.RemoveAt
方法删除该项目:
var list = new List<int>() { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
int indexToRemove = new Random().Next(list.Count);
list.RemoveAt(indexToRemove);