Дублирование при работе с вложенными циклами foreach
Есть код, который производит поиск слов в матрице, содержащей в себе string значения. Есть класс Theme (тематика), описывающий тематику анализа, и коллекция слов, относящихся к данной тематике.
class Theme
{
public string name;
public List<string> words;
public Theme(string name, List<string> words)
{
this.name = name;
this.words = words;
}
}
Например, я могу произвести поиск в матрице: 1) по тематике "Математические термины", к которым относятся слова "Аксиома", "Теорема". 2) по тематике "Досуг", к которой относятся слова "видеоигры", "сериалы".
Тематики сохранены в следующем формате:
List<Theme> listOfThemesAndRelevantWords;
Пока я ищу по одной тематике, все в порядке. Проблемы возникают при поиске сразу нескольких тематик. Проблемы я так полагаю в коде ниже:
for (int i = 2; i < matrix.GetLength(1)-2; i++)
{
foreach(var theme in listOfThemesAndRelevantWords)
{
foreach (var word in theme.words)
{
if (слово найдено)
{
results.Enqueue(new Interaction(
theme.name.ToString(),
matrix[0,i],
<....>
matrix[24, i]));
}
}
}
}
Так, например, если я произведу поиск по каждой тематике отдельно и потом сложу результаты по каждой тематике то получу 10 строчек где встречается хотя бы одно из данных слов. Если я произвожу поиск сразу по двум тематикам, то результатов становится в двое больше и результаты дублируются => я проверяю по каждому слову дважды. Так не должно быть. Как исправить данный код? Как избежать дублирования?
Ответы (1 шт):
for (int i = 2; i < matrix.GetLength(1)-2; i++)
{
bool found = false;
foreach(var theme in listOfThemesAndRelevantWords)
{
foreach (var word in theme.words)
{
// поиск слов, сохранение результата
// если нашли, назначить переменной found значение true
if (found)
break;
}
if (found)
break;
}
}