2014-09-16 1 views
0

Мне нужно пройти список, содержащий строковые предложения, и найти предложения, содержащие строковые слова из другого списка, и добавить их в отдельный список для отображения целей. Код ниже печатает одно и то же предложение несколько раз, поэтому мне было интересно, какой правильный формат вложенного цикла foreach?C# Правильный формат вложенного цикла foreach?

List<string> sentenceList = new List<string>(); 
     sentenceList.Add("Dog ate a bone"); 
     sentenceList.Add("Cat had a ball and bone"); 

     List<string> keywords = new List<string>(); 
     keywords.Add("bone"); 
     keywords.Add("Cat") 

List<string> NewList = new List<string>(); 

      foreach (string sentence in sentenceList) 
      { 
       foreach (string word in keywords) 
       { 
        if (sentence.Contains(word)) 
        { 
         NewList.Add(sentence); 
        } 
       } 
      } 

Что я получаю в качестве вывода:

Собака съела кости

кошки мяч и кости

кошки мяч и кости

Я хочу, чтобы каждое предложение появлялось только o Очевидно, но почему он повторяется дважды? Что я делаю не так?

+0

I получает повторяется, потому что второе предложение содержит оба ключевых слова (кости и Cat) , – user1492780

ответ

0

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

Вы можете проверить, если он уже существует в нем не добавить:

if (sentence.Contains(word)) 
{ 
    if(!NewList.Contains(sentence)) 
    NewList.Add(sentence); 
} 

код:

foreach (string sentence in sentenceList) 
{ 
    foreach (string word in keywords) 
    { 
     if (sentence.Contains(word)) 
     { 
     if(!NewList.Contains(sentence)) 
      NewList.Add(sentence); 
     } 
    } 
} 
+0

Спасибо, человек, глупая ошибка: D –

0

В обоих предложениях «кость» одно и то же слово список ключевых слов должен содержать

List<string> keywords = new List<string>(); 
     keywords.Add("Dog"); // or keywords.Add("ate") 
     keywords.Add("Cat") 
+0

Это не решает проблему. Если все сделано правильно, она должна отображать оба предложения один раз. –

Смежные вопросы