清理阵列中未使用的空间

时间:2018-12-08 21:16:05

标签: c# visual-studio

如果我有一个长度为20的数组:

int[] arr = new int[20] { 3, 7, 2, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

我只输入5个数字,然后如何从该数组中删除0?

int[] arr = new int[] { 3, 7, 2, 99, 4 };

使用基本方法,将不会使用LinqCollections.Generics

3 个答案:

答案 0 :(得分:2)

int[] arr = new[] { 3, 7, 2, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

删除不带Linq或Collections的0。泛型:

int[] newArr = new int[arr.Length];
int newSize = 0;

for (int i = 0; i < arr.Length; i++)
    if (arr[i] != 0)
    {
        newArr[newSize] = arr[i];
        newSize++
    }

if (newSize > 0)
    Array.Resize(ref newArr, newSize);

如果您知道用户输入了多少项,也可以执行以下操作:

Array.Resize(ref arr, numberOfItemsUserEntered);

int[] newArr = new int[numberOfItemsUserEntered];

Array.Copy(Array, newArr, numberOfItemsUserEntered);

使用Linq删除0(出于完整性)

arr = arr.Where(i => i != 0).ToArray();

答案 1 :(得分:2)

由于您无法使用Linq或任何其他集合,因此可以使用Array.Resize

Array.Resize(ref arr, newSize); 

其中newSize应替换为用户输入的数字,因此,在您的情况下为5

另一方面,为什么要首先声明数组包含20个元素?更好的解决方案是问用户要输入多少个项目,然后您可以根据给定的输入简单地构造一个数组。

这样,您不必构造具有预定义大小的数组,以后也不必重新调整大小。

答案 2 :(得分:0)

int[] arr = { 3, 7, 2, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

首先使用

定位第一个0
int index = Array.FindIndex(arr, x => x == 0);

然后您可以致电

Array.Resize(ref arr, index);