2014-10-04 3 views
0

Я пытаюсь найти слова в списке. У меня есть Array со словами для поиска, у меня есть строка со словом, чтобы найти, и у меня есть Список, который я добавляю письма.Поиск слов в массиве?

Я хочу найти слова, содержащиеся в поиске Array, ищем в List wordsCollected.

Как это сделать?

Я пробую это.

private string[] search = {"CAKE", "COFFEE"}; //words to search 
private string wordFind = "CAKE";    //word find 
private List<String> wordsCollected = new List<string>();   //add letters 


/** add letters - A B C D E F G H .... */ 
public void addWordsCollected(string p){ 
     if(!wordsCollected.Contains(p)){ 
      wordsCollected.Add(p);    
     }    
    } 

/** check if wordFind is found */ 
public bool isWordFound(){ 
    bool found = false; 

     for (int x = 0; x < wordsCollected.Count; x++){ 
      found = wordsCollected[x].IndexOf(wordFind); 
      if(found >= 0){             
       break; 
       found = true; 
      } 
     } 
     return found;   
    } 

} 
+4

Что такое поисковый массив? Что такое wordFind? – brz

+0

Не могли бы вы предоставить немного больше контекста? Я не понимаю, что вы пытаетесь сделать. – BradleyDotNET

+0

В isWordFound() у вас есть переменная bool «found», и внутри цикла «for» вы неправильно ее используете, как если бы это был int, а не bool. Вам нужны две разные переменные. – RenniePet

ответ

1

Одна из возможностей - использовать LINQ для поиска определенного слова внутри массива строк. Но что, если вы вместо этого подумаете о принятии строкового массива для поиска внутри этого другого массива строк, что даст больше общего решения (одно слово для поиска или много).

Вот какой код я положил в LinqPad, который должен быть гораздо более компактным, чем код, указанный вами здесь, используя LINQ, я протестировал его внутри LinqPad, и если я понял проблему, которую вы хотите решить здесь, может быть решением:

void Main() 
{ 
    string[] search = { "CAKE", "COFFEE", "TEA", "HONEY", "SUGAR", "CINNEMON" }; 
    string[] wordsToFind = { "CAKE", "TEAPOT" }; 

    List<String> wordCollected = search.Where(s => s == wordsToFind[0]).ToList(); 
    wordCollected.Dump(); 
    wordCollected = search.Where(x => wordsToFind.Any(w => w == x)).ToList(); 
    wordCollected.Dump(); 
} 

код выше сначала ищут первое слово «ТОРТ», а следующий код поиск для «ТОРТА» и «чайника», в поиске массива. Обратите внимание: метод Дамп здесь является методом расширения внутри LinqPad для отображения результатов. Если вы будете использовать код вне LinqPad (который, я думаю, вы хотите), удалите две строки выше, конечно. Также обратите внимание, что существует вероятность того, что оператор Any быстрее, чем Contains, так как это быстрее завершается? Я исправлю здесь?

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