ВУЗ:
Составители:
Рубрика:
13
int[] newData = new int[data.Length - 1];
for (int i = 0; i < delIndex; i++) {
newData[i] = data[i];
}
for (int i = delIndex; i < newData.Length; i++) {
newData[i] = data[i + 1];
}
Теперь очевидно, что после удаления массив data нам не нужен, а нужен
newData. Т. е. можно сказать, что в data надо записать newData.
int[] data = new int[] { 2, 4, 6, 8, 4, 1, 3, 7 };
int delIndex = 3;
int[] newData = new int[data.Length - 1];
for (int i = 0; i < delIndex; i++) {
newData[i] = data[i];
}
for (int i = delIndex; i < newData.Length; i++) {
newData[i] = data[i + 1];
}
data = newData;
Введенная последняя строка (data = newData) очень важна, если выделять
отдельную процедуру удаления элемента. Она указывает на то, что data
изменяется. Т. е. в процедуре появится ключевое слово ref.
Для удаления нам необходимо знать массив, из которого удаляется
элемент и индекс удаляемого элемента. Реализация будет иметь следующий
вид:
public static void delByIndex(ref int[] data, int delIndex) {
int[] newData = new int[data.Length - 1];
for (int i = 0; i < delIndex; i++) {
newData[i] = data[i];
}
for (int i = delIndex; i < newData.Length; i++) {
newData[i] = data[i + 1];
}
data = newData;
}
Таким образом логика обобщенного алгоритма следующая: массив делится
на 2 части – элементы до удаляемого и после удаляемого. До удаляемого
элементы переписываются без смещения по индексации, а те, которые
расположены после удаляемого, переписываются со смещением индексации в
единицу.
Отметим некоторые важные следствия алгоритма удаления элемента
массива по индексу:
1. Удаление ведет к уменьшению
размера массива на 1. Как следствие
это ведет к изменению массива.
2. Можно сказать, что удаляемый элемент «дробит» массив на 2 части –
элементы до удаляемого элемента и элементы после удаляемого.
3. У элементов, которые находятся после удаляемого, индексация
изменяется на единицу.
Страницы
- « первая
- ‹ предыдущая
- …
- 11
- 12
- 13
- 14
- 15
- …
- следующая ›
- последняя »