C# 清理数组中未使用的空间

C# 清理数组中未使用的空间,c#,visual-studio,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 }; 对于基本方法,还不会使用Linq和集合.Generics int[] arr = new[] { 3, 7, 2, 99, 4, 0, 0, 0, 0,

如果我有一个长度为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 };
对于基本方法,还不会使用
Linq
集合.Generics

int[] arr = new[] { 3, 7, 2, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
删除没有Linq或集合的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);

使用Linq删除0(为了完整性)

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

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

Array.Resize(ref arr, newSize); 
其中,
newSize
应替换为用户输入的数字量,因此在您的情况下,它将是
5

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

通过这种方式,您不必构建具有预定义大小的数组,也不必在以后调整其大小

int[] arr = { 3, 7, 2, 99, 4, 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);

而我只输入5个数字
只需计算用户的数字entered@L.B我该怎么做?当我制作数组时,我不知道将要输入多少个数字。请使用
列表
。它允许您添加或删除元素并重新定义其容量。请使用
List
而不是固定大小的
int[]
,然后使用
。在用户输入数字时将其添加到列表中。这样您就不需要删除任何内容。@Bradly 1-创建一个足够大的数组,2-将用户输入的数字添加到该数组中,然后计算数字。3-将原始数组复制到新数组(此时您知道新数组的大小)谢谢,对数组也适用。复制,而不是调整大小?@Bradly我添加了一个
数组。将
版本复制到我的答案中。如果这有助于您解决问题,请将其标记为答案!
int index = Array.FindIndex(arr, x => x == 0);
Array.Resize(ref arr, index);