Вы должны войти, чтобы создавать сообщения и темы.

Работа с массивами и списками

Добрейший вечерок. У меня вопрос по массивам и спискам. Никак не могу найти рабочий способ выполнения нужных мне операций

Есть два текстовых массива strings_1[] и strings_2[] с одинаковым количеством строк, с ними нужно сделать следующее

В массиве strings_2 нужно найти строку, содержащую текст "текст", именно содержащую "текст" но не в точности совпадающую
Далее нужно узнать номер этой строки, скажем strings_2[2]
Потом удалить строку с таким номером из обоих массивов, strings_1[2] и strings_2[2]
В и конце, с текстом каждой строки массива strings_2 нужно совершить определенные операции, что то заменить, добавить новый текст в начале или в конце строки. И вот что именно нужно делать с каждой строкой, будет зависеть от того, какой текст содержится в массиве strings_1

Скажем если в strings_1[0] есть текст "строка 1", то из строки strings_2[0] нужно удалить текст "какой то текст"
Если в strings_1[1] есть текст "строка 2", то к строке strings_2[1] нужно в начале добавить текст "какой то другой текст "
И тому подобное

Как это сделать через массивы? Я смотрел видео уроки но про массивы там как то совсем мало было сказано
И так же спрашиваю как сделать тоже самое но не с массивами, а со списками. Может со списками будет проще?

Для массивов я вроде нашел решение

int index = ArrayIndexOf(strings_2, "текст");

void ArrayResize(int index, string[] arr_name)
{
    for (int i = index; i < arr_name.Length - 1; i++)
    {
        arr_name[i] = arr_name[i + 1];
    }
    Array.Resize(ref arr_name, arr_name.Length - 1);
}

if (index != -1)
{
    ArrayResize(index, strings_1);
    ArrayResize(index, strings_2);
}

int ArrayIndexOf(string[] arr_name, string contains_text)
{
    for (int i = 0; i < arr_name.Length; i++)
        if (arr_name[i].Contains(contains_text))
            return i;
    return -1;
}

index = ArrayIndexOf(strings_1, "строка 1");

if (index != -1)
{
    strings_2[index] = "Процессор " + strings_2[index].Replace("какой то текст", "");
}

index = ArrayIndexOf(strings_1, "строка 2");

if (index != -1)
{
    strings_2[index] = "какой то другой текст " + arr_jap_systestrings_2s_dd[index];
}

Но есть проблемка. Этот код почему то не уменьшает количество строк в массиве. По идее строк должно стать на одну меньше, я ведь одну удалил. Но нет. Строк остается столько же а предпоследняя дублируется на последнюю...

Цитата: Игорь от 13.11.2023, 01:23

Этот код почему то не уменьшает количество строк в массиве.

Привет! Для параметра string[] arr_name метода ArrayResize добавь ref: Скопированоvoid ArrayResize(int index, ref string[] arr_name). И в вызове метода также добавь ref: СкопированоArrayResize(index, ref strings_1).

Лайкнули Валера и Игорь
ВалераИгорь
Цитата: Вася от 13.11.2023, 11:25
Цитата: Игорь от 13.11.2023, 01:23

Этот код почему то не уменьшает количество строк в массиве.

Привет! Для параметра string[] arr_name метода ArrayResize добавь ref: Скопированоvoid ArrayResize(int index, ref string[] arr_name). И в вызове метода также добавь ref: СкопированоArrayResize(index, ref strings_1).

Наверно так и нужно было сделать, но я уже через списки все повторил.

int index = ListContains(strings_2, "текст");

int ListContains(List<string> list_name, string contains_text)
{
    for (int i = 0; i < list_name.Count; i++)
        if (list_name[i].Contains(contains_text))
            return i;
    return -1;
}

if (index != -1)
{
    strings_1.RemoveAt(index);
    strings_2.RemoveAt(index);
}

index = ListContains(strings_1, "строка 1");

if (index != -1)
{
    strings_2[index] = strings_2[index].Replace("какой то текст", "");
}

index = ListContains(strings_1, "строка 2");

if (index != -1)
{
    strings_2[index] = "какой то другой текст " + strings_2[index];
}

Мне показалось это проще