Работа с массивами и списками
Цитата: Игорь от 12.11.2023, 23:19Добрейший вечерок. У меня вопрос по массивам и спискам. Никак не могу найти рабочий способ выполнения нужных мне операций
Есть два текстовых массива 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] нужно в начале добавить текст "какой то другой текст "
И тому подобноеКак это сделать через массивы? Я смотрел видео уроки но про массивы там как то совсем мало было сказано
И так же спрашиваю как сделать тоже самое но не с массивами, а со списками. Может со списками будет проще?
Добрейший вечерок. У меня вопрос по массивам и спискам. Никак не могу найти рабочий способ выполнения нужных мне операций
Есть два текстовых массива 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] нужно в начале добавить текст "какой то другой текст "
И тому подобное
Как это сделать через массивы? Я смотрел видео уроки но про массивы там как то совсем мало было сказано
И так же спрашиваю как сделать тоже самое но не с массивами, а со списками. Может со списками будет проще?
Цитата: Игорь от 13.11.2023, 01:23Для массивов я вроде нашел решение
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]; }Но есть проблемка. Этот код почему то не уменьшает количество строк в массиве. По идее строк должно стать на одну меньше, я ведь одну удалил. Но нет. Строк остается столько же а предпоследняя дублируется на последнюю...
Для массивов я вроде нашел решение
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, 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).
Цитата: Игорь от 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, 23:37Цитата: Вася от 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]; }Мне показалось это проще
Цитата: Вася от 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];
}
Мне показалось это проще