2010-08-04 4 views
0

J'essaie d'obtenir x nombre de mots uniques de chaque côté d'un mot dans une chaîne en C#. par exemple, la méthodeObtenir x nombre de mots uniques de chaque côté d'un mot dans une chaîne?

GetUniqueWords("she sells seashells, by the seashore. the shells she sells, are surely seashells.", "seashore", 3) 

(Le premier paramètre est la chaîne de phrase. Le second paramètre est le mot qui sera utilisé pour obtenir des mots sur ses deux côtés. Le troisième paramètre est le nombre de mots à vérifier)

retourne une liste de chaînes avec des valeurs:


par seashells
les
coquilles
elle

Merci d'avance.

+0

Qu'en est-il des cas particuliers: - si j'avais fourni au lieu de seashells mer? - Et si le mot est le dernier/premier ou plus généralement moins que le nombre fourni depuis le début/fin? –

Répondre

2

Pas assez, mais travaillant pour votre échantillon :-)

private static IEnumerable<string> GetUniqueWords(string phrase, string word, int amount) 
    { 
     //Clean up the string and get the words 
     string[] words = Regex.Split(phrase.Replace(".","").Replace(",",""),@"\s+"); 

     //Find the first occurrence of the desired word (spec allows) 
     int index = Array.IndexOf(words,word); 

     //We don't wrap around the edges if the word is the first, 
     //we won't look before if last, we won't look after, again, spec allows 
     int min = (index - amount < 0) ? 0 : index - amount; 
     int max = (index + amount > words.Count() - 1) ? words.Count() - 1 : index + amount; 

     //Add all the words to a list except the supplied one 
     List<string> rv = new List<string>(); 
     for (int i = min; i <= max; i++) 
     { 
      if (i == index) continue; 
      rv.Add(words[i]); 
     } 

     //Unique-ify the resulting list 
     return rv.Distinct(); 
    } 
} 
+0

magie, merci !!! – StarCub

Questions connexes