如果我有一个长度为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
和Collections.Generics
。
答案 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 };
首先使用
定位第一个0int index = Array.FindIndex(arr, x => x == 0);
然后您可以致电
Array.Resize(ref arr, index);