КАК УДАЛИТЬ ЭЛЕМЕНТ ИЗ МАССИВА | первый элемент | последний элемент | по индексу | C# УРОКИ | ДЗ #14

КАК УДАЛИТЬ ЭЛЕМЕНТ ИЗ МАССИВА | первый элемент | последний элемент | по индексу | C# УРОКИ | ДЗ #14

#SimpleCode

4 года назад

65,565 Просмотров

Ссылки и html тэги не поддерживаются


Комментарии:

@bayfong8087
@bayfong8087 - 13.10.2023 19:59

Всем привет! Надеюсь, что кто-нибудь ответит xD

Проверьте плиз мое решение, оно вроде бы работает, но че-то я сомневаюсь

static void delete(ref int[] array, int index)
{
int[] newArr = new int[array.Length - 1];

for (int i = 0; i < index; i++)
{
newArr[i] = array[i];
}
for (int i = index; i < newArr.Length; i++)
{
newArr[i] = array[i + 1];
}
array = newArr;
}

Ответить
@KlevaGameS
@KlevaGameS - 12.10.2023 15:18

Благодарю за урок.

Ответить
@ZuraevD
@ZuraevD - 10.09.2023 13:11

можно ещё вот так сделать
for (int i = index; i < newArray.Length; i++)
newArray[i] = array[i+1];

Ответить
@user-ud6rn1bc1p
@user-ud6rn1bc1p - 07.08.2023 14:50

Сначала выполнил задание, затем посмотрел урок для самопроверки.
Во втором цикле "for" сделал немного по другому, чем у автора. Вроде бы тоже всё правильно работает.
static void DeleteIndex (ref int[] array, int index) // Удаление элемента по указанному индексу
{
int[] newArray = new int[array.Length - 1]; // Создаём новый массив с -1 кол-м элементов
for (int i = 0; i < index; i++) // Перебираем элементы до удаляемого индекса
newArray[i] = array[i];

for (int i = index; i < newArray.Length; i++)
newArray[i] = array[i+1]; // Пропускаем элемент с индексом, который нужно было удалить, и заполняем новый массив далее
array = newArray; // Присваиваем новому массиву имя старого, принимаемого в метод
}

Ответить
@user-xw2os2fu5p
@user-xw2os2fu5p - 28.07.2023 21:58

Первый раз сделал всё как в видео, но потом нашёл замечательный метод Copy, и обошелся без циклов
static void DeleteAnyElement<T>(ref T[] OldArray, uint Index)
{
if ( Index < OldArray.Length)
{
T[] NewArray = new T[OldArray.Length - 1];

Array.Copy(OldArray, 0, NewArray, 0, Index);

Array.Copy(OldArray, Index + 1, NewArray, Index, NewArray.Length - Index);

OldArray = NewArray;
}
else
Console.WriteLine("Неверный индекс");

Ответить
@megazeph9887
@megazeph9887 - 14.07.2023 07:33

Я так сделал. Плюс добавил, чтобы удалялся элемент не по индексу а по значению. Единственный нюанс, что работает только в том случае, если все значения в массиве разные.

void Resize(ref int[] arr, int id)
{

int[] myArray = new int[arr.Length - 1];
for (int i = 0; i < id; i++)
{
myArray[i] = arr[i];
}
for (int i = id; i < myArray.Length; i++)
{
myArray[i] = arr[i + 1];
}

arr = myArray;
}

int[] myArray = { 4, 7, 10, 9, 6, 13, 19, 5 };

int Value = 5;

int id = 0;

for (int i = 0; i < myArray.Length; i++)
{
if (myArray[i] == Value )
id = i + id;
}

Resize(ref myArray, id);

Ответить
@xuy228
@xuy228 - 27.06.2023 09:13

мне 14 лет, решил изучить c# спасибо вам за уроки Сергей!

Ответить
@uprekayshiy_goose
@uprekayshiy_goose - 05.06.2023 13:21

моё решение:
static void arrayremove(ref int[] arr, int index)
{
int[] ss = new int[arr.Length - 1];

for(int i = 0; i < index; i++)
{
ss[i] = arr[i ];
}

for(int i = index ; i < ss.Length; i++)
{
ss[i] = arr[i + 1];
}

arr = ss;
}

Ответить
@mystical.labyrinth
@mystical.labyrinth - 04.05.2023 07:30

У меня так получилось :)
internal class Program
{
static void Main(string[] args)
{
int[] myArray = { 5, 15, 25, 100, 805, 205 };

DeleteTheBegin(ref myArray);
Delete(ref myArray, 2);
DeleteTheEnd(ref myArray);

for (int i = 0; i < myArray.Length; i++)
{
Console.Write(myArray[i] + " | ");
}
}

static void DeleteTheBegin(ref int[] array)
{
Delete(ref array, 0);
}

static void Delete(ref int[] array, int index)
{
int[] tempArray = new int[array.Length - 1];

for (int i = 0; i < index; i++)
{
tempArray[i] = array[i];
}

for (int i = index; i < tempArray.Length; i++)
{
tempArray[i] = array[i + 1];
}

array = tempArray;
}

static void DeleteTheEnd(ref int[] array)
{
Delete(ref array, array.Length - 1);
}
}

Ответить
@JOnatanKERtis
@JOnatanKERtis - 18.04.2023 15:03

2 цикл писал немного по другому:
for (int i = index; i < ArrayNew.Length; i++)
ArrayNew[i] = Array[i+1];
Но по сути роли это "вроде" не играет.
Очень интересно и доступно объясняете, особенно хорошо что в дебаге показываете "логику".

Ответить
@eugenev423
@eugenev423 - 18.02.2023 18:03

Спасибо

Ответить
@mr.mer5.7.09
@mr.mer5.7.09 - 17.02.2023 19:01

static void Delete(ref int[] arr, int value)
        {
            if (arr == null)
            {
                return;
            }

            int index = 0;

            for (int i = 0; i < arr.Length; i++)
            {
                if (arr[i] == value)
                {
                    index = i;
                    break;
                }
            }

            int[] arr2 = new int[arr.Length - 1];

            int j = 0;

            for (int i = 0; i < arr2.Length; i++, j++)
            {
                if (index != i)
                {
                    arr2[i] = arr[j];
                }
                else
                {
                    j++;
                    arr2[i] = arr[j];
                }
            }
            arr = arr2;

        }
Delete element in Array
Тут уже елемент удаляется

Ответить
@evilgamer2503
@evilgamer2503 - 15.02.2023 19:40

А я поставил только плюс к индексу в старом масиве и получилось тоже самое

Ответить
@-karask0
@-karask0 - 19.01.2023 23:16

Приветствую всех, у меня есть еще вот такой варинат для людей которые как я ъотели сделать удаление например за числом а не за индексом:
static void deleteNumber (ref int[] arr, int chosenNumber)
{
int[] newArray = new int[arr.Length - 1];

int index = Array.FindIndex(arr,i=>i == chosenNumber);

for (int i = 0; i < (index+1); i++)
newArray[i] = arr[i];
for (int i = (index+1); i < arr.Length; i++)
newArray[i - 1] = arr[i];

arr = newArray;
}

static void Main(string[] args)
{
int[] arr = new int[10];
Random rand = new Random();

for (int i = 0; i < arr.Length; i++)
{
arr[i] = rand.Next(100);
Console.Write(" " + arr[i]);
}

Console.Write("\n\nWhat number would you like to delete?: ");
int chosenNumber = int.Parse(Console.ReadLine());

deleteNumber(ref arr, chosenNumber);

Console.WriteLine();
for (int i = 0; i < arr.Length; i++)
{
Console.Write(" " + arr[i]);
}

Console.WriteLine("\n\nFor EXIT press ENTER!");
Console.ReadLine();

Буду рад любой критике

Ответить
@dimkinazvezda
@dimkinazvezda - 02.12.2022 08:52

Интересно обнаружить что при повторной отладке во вновь созданном массиве newArray ты видишь данные из прошлой отладки - добавляет понимание что такое ref и куча : )

Ответить
@reigera_cs
@reigera_cs - 21.09.2022 07:42

Spasibo!

Ответить
@kexetmine
@kexetmine - 05.09.2022 20:29

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Щас_напишу_контетнт
{
internal class Program
{

static void Main(string[] args)
{

int[] aray = { 1, 18, 161, 325, 13, 1255, 33341, 41, 3, 5 };

aray = Deleter(ref aray, 5, 10);
}

static int[] Deleter(ref int[] arr, int index, int num)
{

int[] newArr = new int[arr.Length - 1];

for (int i = 0; i < (arr.Length - 1); i++)
{
if (i == index) {
newArr[i] = arr[i + 1];
index = i + 1;
}
else { newArr[i] = arr[i]; }
}
return newArr;
}
}
}

Ответить
@user-nb8ll9ye1i
@user-nb8ll9ye1i - 22.07.2022 17:52

У меня такая история получилась . По-моему даже проще. Или шляпа?

T[] vs = new T[arr.Length - 1];

for (int i = 0, j = 0; j < vs.Length; i++, j++)
{
if (i == arrindex)
i++;

vs[j] = arr[i];
}

arr = vs;

Ответить
@user-iy9wp5gn3g
@user-iy9wp5gn3g - 08.07.2022 17:27

Нет проверки на неправильный индекс

Ответить
@user-sq4ff4zp9b
@user-sq4ff4zp9b - 30.06.2022 11:46

Я сделал немного по другому) посмотрите, оцените

static void DecArrayInIndex(ref int[] arr)
{
int[] arr1 = arr;

arr = new int[arr.Length - 1];

Console.WriteLine("Укажите индекс");
uint index = uint.Parse(Console.ReadLine());

for (int i = 0; i < index; i++)
arr[i] = arr1[i];

for (; index < arr.Length; index++)
arr[index] = arr1[index + 1];
}

Ответить
@mihailmatkovskij9350
@mihailmatkovskij9350 - 05.06.2022 23:39

А как сделать функцию, чтобы модно было работать с массивами произвольного типа?

Ответить
@familyliquid5523
@familyliquid5523 - 04.06.2022 18:33

Я выполнил д/з чутка иначе
-------------------------------------------------------------------------------------
using System;

namespace Up
{
internal class Program
{
static void func(ref byte[] arr, byte index)
{
byte[] newarr = new byte[arr.Length-1];
for (byte i = 0; i < newarr.Length; i++)
{
if (newarr[i] == arr[index]) continue;
newarr[i] = arr[i];
}
arr = newarr;
}
static void Main(string[] args)
{
byte[] arr = { 5, 4, 6, 3 };
func(ref arr, 3);


arr = null;
}
}
}

Ответить
@danyarcraft
@danyarcraft - 28.05.2022 19:48

class Program
{
static int[] RandArray()
{
Random rand = new Random();

int[] myArray = new int[rand.Next(5, 10)];

for (int i = 0; i < myArray.Length; i++)
myArray[i] = rand.Next(10, 100);

return myArray;
}
static void DelElem(ref int[] myArray, int a)
{
int[] newArray = new int[myArray.Length - 1];

for (int i = 0; i < a; i++)
newArray[i] = myArray[i];

for (int i = a; i < newArray.Length; i++)
newArray[i] = myArray[i+1];

myArray = newArray;
Console.WriteLine();
}
static void DelFirst(ref int[] myArray)
{
DelElem(ref myArray, 0);
}
static void DelLast(ref int[] myArray)
{
DelElem(ref myArray, myArray.Length-1);
}
static void Main(string[] args)
{
int[] myArray = RandArray();

foreach (var item in myArray)
Console.WriteLine(item);

Console.Write("Введите индекс элемента которого вы хотите удалить: ");
int c = int.Parse(Console.ReadLine());

DelLast(ref myArray);

foreach (var item in myArray)
Console.WriteLine(item);
}
}

Ответить
@orhanaliyev9774
@orhanaliyev9774 - 13.05.2022 01:25

Без двух циклов,проскакиваем ненужный индекс,это у меня как домашка была в универе по теме циклы))
for(int i=0,j=0; i<arr1.Length; j++,i++)
{
arr1[i]=arr[j];
if(j==index) { j++; arr1[i]=arr[j]; }
}

Ответить
@yokunade
@yokunade - 10.03.2022 19:43

Спасибо огромное, очень помог!

Ответить
@user-lp1hn9js4q
@user-lp1hn9js4q - 01.03.2022 20:28

Спасибо! Такой формат и качество уроков позволяет идти к своей мечте! Я не студент, был студентом , который учил с++ двадцать лет назад. А сейчас решил поменять сферу деятельности и вернуться в мир программирования, что оказалось очень не просто. Мне активно помогают любимая жена, трое деток, трое котов и песик))))). Благодаря невероятному качеству роликов, а не теряю веру в свои силы и шаг за шагом познаю с #. Получаю огромное удовольствие от процесса обучения!!! Да. Мне 36 лет. Я помню время , когда учил делфи по книжкам , изучал интербейз и SQL. Мой диплом - это программа склад написанная на делфи и базе oracle. Я торжественно обещаю, как только устроюсь на работу мечты - за мной не заржавеет!!!

Ответить
@user-zi2fh7zp1q
@user-zi2fh7zp1q - 27.02.2022 14:39

for (int i = value; i < newArray.Length; i++)
{
newArray[i] = mass[i + 1];
}

Так попроще.

Ответить
@UvarovGG
@UvarovGG - 10.02.2022 11:17

если массиву стринговый ? string [] array ?
Как у него удалить первый и последний, и по индексу ?

Ответить
@Sum_piscis
@Sum_piscis - 27.12.2021 12:44

Не понимаю зачем использовать два цикла если можно просто поставить условие с continue в одном.

Ответить
@geshoi
@geshoi - 08.12.2021 15:25

А мне стыдно признаться, что ни одного урока я сам не сделал.

Ответить
@user-nc4dv3ub3p
@user-nc4dv3ub3p - 29.11.2021 23:00

Я чёт затупил и не захотел думать, какое условие должно быть в цикле. В итоге обернул первый цикл в IF else и проверял на несоответствие с index, а если соответствие, то break (выход из цикла). а второй цикл такой же). Не знаю, почему именно в этом дз так решил сделать, но хоть ключевое слово break вспомнил :D

Ответить
@kostya_engineer
@kostya_engineer - 08.11.2021 07:27

Сергей спасибо большое за Ваши уроки.
Не уверен что я прав, но удаление элемента массива можно произвести используя один цикл ( добавив одну локальную переменную).
Простите, что код без комментариев :

static void Mymass(ref int[] array, int size)
{
int [] NewMass = new int[array.Length-1];
int temp = 0;

for (int i = 0; i < array.Length; i++)
{
if (i == size)
{
continue;
}
NewMass[temp] = array[i];
temp++;
}
array = NewMass;
}

Ответить
@fillion6288
@fillion6288 - 04.11.2021 01:06

А на каком языке написан Visual Studio?…

Ответить
@artlinestudio6735
@artlinestudio6735 - 27.10.2021 11:17

Полезный урок!

Ответить
@MDTxFlaSh
@MDTxFlaSh - 24.10.2021 10:58

Спасибо за то что делаешь ,мужик! Моя первая зп будет твоя))

Ответить
@user-od8mn6ns2z
@user-od8mn6ns2z - 01.10.2021 12:56

Все 3 дз сделал своей логикой (она скорее всего менее правильная), но радует хоть то , что сделал правильно работающие методы )

Ответить
@user-nh1lp8xt4j
@user-nh1lp8xt4j - 05.09.2021 04:09

Я не так понял ДЗ опять. Я заменял элемент на 0 а не удалял ячейку))

Ответить
@ifelru
@ifelru - 27.08.2021 19:27

Спасибо за отличные ДЗ и их решение!

Ответить
@habel2446
@habel2446 - 24.08.2021 18:10

Спасибо за прекрасные уроки и задачи, но есть маленькая ремарочка:
Использую 1 массив и для удаления и для добавления, можно же просто по индексу работать
for (int i = 0; i < arr1.Length && i < arr.Length; i++)
{
if (i >= index)
{
arr[i] = arr1[i+1];
continue;
}
arr[i] = arr1[i];
}

на выходе получается все верно, но при этом на 1 цикл меньше нагрузки

Ответить
@user-jr7gx6wg7f
@user-jr7gx6wg7f - 04.08.2021 09:43

Скажите пожалуйста, какую версию Visual studio вы используете

Ответить
@user-mc7kc2bd8b
@user-mc7kc2bd8b - 29.07.2021 17:30

Спасибо!

Ответить
@mediafile9995
@mediafile9995 - 28.07.2021 11:25

Хм... А зачем вы сделали i = index + 1? Можно было сделать i = index; newArray[i] = array[i + 1]... Или это для читаемости кода?

Ответить
@TheRavagv
@TheRavagv - 17.06.2021 20:53

Сделал немного по-другому
static void DeleteIndex(ref int[] array, int indexNumber)
{
int[] newArray = new int[array.Length - 1];

for (int i = 0; i < indexNumber; i++)
{
newArray[i] = array[i];
}

for (int i = indexNumber; i < newArray.Length; i++)
{
newArray[i] = array[i+1];
}

array = newArray;
}

static void DeleteFirstIndex(ref int[] array)
{
DeleteIndex(ref array, 0);
}

static void DeleteLastIndex(ref int[] array)
{
DeleteIndex(ref array, array.Length-1);
}

Ответить
@bfdhtfyjhjj
@bfdhtfyjhjj - 12.06.2021 18:21

Почему нельзя создать всего лишь один цикл и когда индекс равен индексу вставляемого элемента писать continue?

Ответить
@_chill_relax_calm4647
@_chill_relax_calm4647 - 08.06.2021 21:14

Поддерживающий комментарий для дальнейшего развития канала

Ответить
@rodanban222
@rodanban222 - 02.06.2021 12:56

для любителей грязи

static void RemoveFirst(ref int[] mainArray)
{

int[] advanceArray = new int[mainArray.Length - 1];

for (int i = 1; i < mainArray.Length; i++)
advanceArray[i - 1] = mainArray[i];

mainArray = advanceArray;

}
static void RemoveLast(ref int[] mainArray)
{

int[] advanceArray = new int[mainArray.Length - 1];

for (int i = 0; i < mainArray.Length - 1; i++)
advanceArray[i] = mainArray[i];

mainArray = advanceArray;

}

Ответить
@egorkalmykov4003
@egorkalmykov4003 - 08.05.2021 23:26

Спасибо !!!

Ответить
@user-zq5hl8hv8g
@user-zq5hl8hv8g - 05.05.2021 19:06

Благодарю!!!

Ответить
@user-vi7ts2we5t
@user-vi7ts2we5t - 03.05.2021 22:02

Я сделал так ,чтобы не пришлось писать дополнительные методы на удаление 1го и последнего индекса массива, и тоже работает =)):
static void DeleteIndex(ref int[] MyArray, int index)
{
int[] newArray = new int[MyArray.Length - 1];

for (int i = 0; i < index; i++)
newArray[i] = MyArray[i];

for (int i = index; i < MyArray.Length && i < MyArray.Length-1; i++)
newArray[i] = MyArray[i+1];

MyArray = newArray;
}

Ответить