Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
2 / 2 / 0
Регистрация: 16.04.2015
Сообщений: 73

Добавление элемента в список, если таковой отсутствует

17.10.2015, 09:20. Показов 5341. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть текстовый файл. В нём присутствуют названия компаний. Мне нужно создать список компаний, находить их по ключевому слову в тексте, затем сравнивать с уже имеющимся списком и, если она уже есть выводить её индекс в списке, если же нет - добавлять в список. Никак не пойму как строить логику.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public void Create_companies_list (ref int i)
        {
            for (i += 0; i < all_lines_articles.Count; i++)
            {
                line = all_lines_articles[i];
                if (line.Contains(DAL.Keywords.KEY_LIST_COMPANIES))
                {
                    for (i += 2; i < all_lines_articles.Count; i++)
                    {
                        line = all_lines_articles[i];
                        bool line_is_not_empty = line.Length > 2;
                        if (line_is_not_empty)
                        {
                            string company_name = line;
                            for (int company_index = 0; company_index < companies_list.Count; company_index++)
                            {
                                string company_current_name = companies_list[company_index].Company_name;
                                if (company_name == company_current_name)
                                {
                                    break;//вот здесь нужно выйти из двух циклов сразу.
                                }
                            }
                            this.companies_list.Add(new Company(company_name));
                        }
                        else
                        {
                            //return;
                            this.Create_companies_list(ref i);
                        }
                    }
                }
            }
        }
Как сделать так, чтобы при совпадении программа выходила сразу из двух циклов. Потому что, если она прервёт внутренний цикл сравнения, то это ничего не меняет, она по завершению всё равно добавит в список компанию не смотря на то, что такая в списке есть. А надо, чтобы наружный цикл запустился заново и взял следующее имя компании.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.10.2015, 09:20
Ответы с готовыми решениями:

Вставить элемент в список, если таковой не присутствует
Если такого элемента нет в «списке», то вставить его туда. Реализация списка посредством указателей

Удалить из списка L за каждым вхождением элемента Е один элемент, если таковой имеется и он отличен от Е
помогите решить плз Составить программу, которая удаляет из списка L за каждым вхождением элемента Е один элемент, если таковой имеется и...

7. Составить программу, которая удаляет из списка L за каждым вхождением элемента E один элемент, если таковой имеется и он отличен от E
помогите пожалуйста!!! срочно надо!

10
8 / 8 / 0
Регистрация: 09.11.2013
Сообщений: 55
17.10.2015, 10:50
Объявите в начале метода bool flag = false;
Во внутреннем цикле перед break поставьте flag = true;
Во внешнем цикле перед его закрывающей скобкой или там где нужен выход напишите инструкцию
if (flag == true) break;
В начале внешнего цикла поставьте flag = false;
1
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
17.10.2015, 10:55
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool breaked = false;
for (int company_index = 0; company_index < companies_list.Count; company_index++)
{
   string company_current_name = companies_list[company_index].Company_name;
   if (company_name == company_current_name)
   {
      breaked=true;      
      break;//вот здесь нужно выйти из двух циклов сразу.
   }
}
if (breaked)
{
   continue;
}
this.companies_list.Add(new Company(company_name))
1
2 / 2 / 3
Регистрация: 25.09.2012
Сообщений: 8
17.10.2015, 17:04
Самое простое - это использовать оператор goto. Просто передать управление на операторы после цикла
0
2 / 2 / 0
Регистрация: 16.04.2015
Сообщений: 73
17.10.2015, 17:17  [ТС]
мне после первого, применённого мной goto, преподаватель спросил: "Желаю ли я, чтобы он прекратил со мной общаться?". Учитывая, что он дал добро на то, чтобы стать моим репетитором, баловаться с этим оператором рискованно ))))
1
2 / 2 / 3
Регистрация: 25.09.2012
Сообщений: 8
17.10.2015, 17:18
Ну это наверно единственный адекватный вариант его использования))
0
2 / 2 / 0
Регистрация: 16.04.2015
Сообщений: 73
17.10.2015, 17:18  [ТС]
пытаюсь прицепить bool флаги по первому варианту... надеюсь справлюсь.
0
2 / 2 / 3
Регистрация: 25.09.2012
Сообщений: 8
17.10.2015, 17:22
Лучший ответ Сообщение было отмечено manumozz как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public void Create_companies_list(ref int i)
        {
            bool flag = false;
            for (i += 0; i < all_lines_articles.Count; i++)
            {
                line = all_lines_articles[i];
                if (line.Contains(DAL.Keywords.KEY_LIST_COMPANIES))
                {
                    for (i += 2; i < all_lines_articles.Count; i++)
                    {
                        line = all_lines_articles[i];
                        bool line_is_not_empty = line.Length > 2;
                        if (line_is_not_empty)
                        {
                            string company_name = line;
                            for (int company_index = 0; company_index < companies_list.Count; company_index++)
                            {
                                string company_current_name = companies_list[company_index].Company_name;
                                if (company_name == company_current_name)
                                {
                                    flag = true;//
                                    break;//вот здесь нужно выйти из двух циклов сразу.
                                }
                            }
                            if (flag) {flag = false; break;}//
                            this.companies_list.Add(new Company(company_name));
                        }
                        else
                        {
                            //return;
                            this.Create_companies_list(ref i);
                        }
                    }
                }
            }
        }
1
2 / 2 / 0
Регистрация: 16.04.2015
Сообщений: 73
17.10.2015, 17:28  [ТС]
Да, это практически то, что нужно итого заработал вот такой код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 public void Create_companies_list (ref int i)
        {
            bool flag = false;
            for (i += 0; i < all_lines_articles.Count; i++)
            {
                line = all_lines_articles[i];
                if (line.Contains(DAL.Keywords.KEY_LIST_COMPANIES))
                {
                    for (i += 2; i < all_lines_articles.Count; i++)
                    {
                        flag = false;
                        line = all_lines_articles[i];
                        bool line_is_not_empty = line.Length > 2;
                        if (line_is_not_empty)
                        {
                            string company_name = line;
                            for (int company_index = 0; company_index < companies_list.Count; company_index++)
                            {
                                string company_current_name = companies_list[company_index].Company_name;
                                if (company_name == company_current_name)
                                {
                                    flag = true;
                                    break;
                                }
                            }
                            if (flag == true)
                            {
                                continue;
                            }
                            else
                            {
                                this.companies_list.Add(new Company(company_name));
                            }
                        }
                        else
                        {
                            this.Create_companies_list(ref i);
                        }
                    }
                }
            }
        }
то есть, внешний цикл должен всё-таки продолжится, просто пропустив повторяющуюся компанию. Большое спасибо за помощь.
0
2 / 2 / 3
Регистрация: 25.09.2012
Сообщений: 8
17.10.2015, 17:29
В условии, если используешь bool, не надо писать ==true. Просто flag, ибо он и так либо false либо true
1
8 / 8 / 0
Регистрация: 09.11.2013
Сообщений: 55
18.10.2015, 08:47
Если Goto явно не грозит запутыванием кода, а наоборот упрощает его, то почему бы им и не воспользоваться в таком случае ? Хотя я в своей практике его никогда не использую. Придерживаюсь рекомендаций старых зубров программирования. И всегда получается обойтись без него.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.10.2015, 08:47
Помогаю со студенческими работами здесь

Добавление нового поля на форме, если в таблице отсутствует
Создана форма. Допустим, уже на ней 5 полей(со своими форматами). Через некоторое время, например, добавится новый показатель для учета....

Добавление нового элемента в список после указанного элемента по значению информационного поля
Добавление нового элемента в список после указанного элемента по значению информационного поля.

Добавление элемента в список
Если элемент списка&lt;0, тогда после него необходимо добавить 0.

Добавление элемента в список
Создать двусвязный линейный список, содержащую информацию о горожанине фамилия И.О., дата рождения, адрес. Посчитать возраст. В...

Добавление элемента в список
В зависимости от переданного через параметр числа вставить его на свое место в список из 25 упорядоченных по убыванию элементов.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru