Очистка неиспользуемых пространств в массиве - PullRequest
0 голосов
/ 09 декабря 2018

Если у меня есть массив длиной 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.

Ответы [ 3 ]

0 голосов
/ 09 декабря 2018

Поскольку вы не можете использовать Linq или любую другую коллекцию, вы можете использовать Array.Resize:

Array.Resize(ref arr, newSize); 

, где newSize следует заменить количеством чисел, введенных пользователем, поэтому в вашемв случае, если это будет 5.

С другой стороны, зачем объявлять массив с 20 элементами на первом месте?Лучшим решением было бы спросить пользователя, сколько элементов они хотят ввести, тогда вы можете просто создать массив на основе заданного ввода.

Таким образом, вам не нужно создавать массив с заранее заданным размером.и позже придется изменить его размер.

0 голосов
/ 09 декабря 2018
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);
0 голосов
/ 09 декабря 2018
int[] arr = new[] { 3, 7, 2, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

Удаление 0 без Linq или Collections.Generics:

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);

Удаление 0 с помощью Linq (для полноты) :

arr = arr.Where(i => i != 0).ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...