Массивы в C# имеют фиксированную длину, указываемую при создании, поэтому встроенного метода для удаления нет.
Алгоритм решения во многом зависит от задачи. Простейший способ состоит в преобразовании массива в список, удалении элемента и (при необходимости) обратном преобразовании. обратное преобразование нужно делать в самом конце, после того, как все элементы, требующие удаления, были удалены. В противном случае будут выполняться лишние преобразования туда и обратно.
Выглядит это следующим образом. Пусть a
— исходный массив, b
— результирующий массив, n
— номер удаляемого элемента.
var tmp = new List(a); // Преобразование в список
tmp.RemoveAt(n); // Удаление элемента
var b = tmp.ToArray(); // Преобразование в массив
В этом коде возможна исключительная ситуация, если элемента с номером n
нет.
Возможно и более эффективное решение: скопировать элементы до и после удаляемого в новый массив.
var b = new int[a.Length - 1]; // Предположим, что массивы целочисленные
Array.Copy(a, 0, b, 0, n);
Array.Copy(a, n+1, b, n, a.Length - n - 1);
Тут также возможны исключения. Например, если n
находится вне диапазона индексов (ArgumentOutOfRangeException
).
В первом способе преобразование в список и обратно, а также удаление элемента потребуют троекратного копирования памяти. Второй способ требует лишь одного копирования элементов.
Если вместо List использовать LinkedList, то удаление будет выполняться за константное время, но возникает проблема поиска элемента с номером n
.
Если часто нужно удалять элементы, то вместо массива лучше воспользоваться другой, более подходящей для задачи структурой данных.
При написании программы нужно отдельно рассмотреть случай, когда в исходном массиве всего один элемент.
Ввод номера осуществляется как обычно. В консоли с помощью Console.ReadLine
, в графическом интерфейсе — из нужного компонента. Выводить же массив удобно при помощи метода string.Join
. Этот метод объединяет строковые представления элементов при помощи указанного разделителя.
Например, если массив b
содержит элементы 1
, 2
и 3
, то код
Console.WriteLine("b = [{0}]", string.Join(", ", b))
выведет на экран
b = [1, 2, 3]
Справка по Array.Copy
Справка по string.Join