2011-08-10 74 views
4

我的單詞列表如下:如何返回以某些字符開頭和結尾的所有單詞?

List<string> words = new List<string>(); 
words.Add("abet"); 
words.Add("abbots"); //<---Return this 
words.Add("abrupt"); 
words.Add("abduct"); 
words.Add("abnats"); //<--return this. 
words.Add("acmatic"); 

我想返回與字母開頭6個字母的所有單詞「一」,有「T」爲第五字的結果應該返回的話「abbots」和「abnats」。

var result = from w in words 
      where w.StartsWith("a") && //where ???? 

我需要添加什麼條款來滿足第5個字母是't'要求?

+0

謝謝你的回答..但是我想稍微修改我的問題,我想返回第5和第6個字母是「ts」的所有單詞嗎? – Fraiser

回答

7
var result = from w in words 
      where w.Length == 6 && w.StartsWith("a") && w[4] == 't' 
      select w; 
1

您可以使用索引:

where w.StartsWith("a") && w.Length > 5 && w[4] == 't' 

沒有Length檢查,這將拋出一個異常較小的話。

請記住,索引器是從零開始的。

1
// Now return all words of 6 letters that begin with letter "a" and has "t" as 
// the 5th letter. The result should return the words "abbots" and "abnats". 

var result = words.Where(w => 
    // begin with letter 'a' 
    w.StartsWith("a") && 
    // words of 6 letters 
    (w.Length == 6) && 
    // 't' as the 5th letter 
    w[4].Equals('t')); 
1

我已經測試了下面的代碼,它給了正確的結果:

var result = from w in words 
      where w.StartsWith("a") && w.Length == 6 && w.Substring(4, 1) == "t" 
      select w; 
1

在回答你的修訂問題,如果你要檢查的最後兩個字母,您可以使用ENDWITH方法或者指定你想檢查的索引。正如SLaks指出的那樣,如果您使用索引,那麼您還必須檢查長度以確保較小的單詞不會導致問題。

List<string> words = new List<string>(); 
words.Add("abet"); 
words.Add("abbots"); //<---Return this 
words.Add("abrupt"); 
words.Add("abduct"); 
words.Add("abnats"); //<--return this. 
words.Add("acmatic"); 

var result1 = from word in words 
       where word.Length == 6 && word.StartsWith("a") && word.EndsWith("ts") 
       select word; 

var result2 = from word in words 
       where word.Length == 6 && word.StartsWith("a") && word[4] == 't' && word[5] == 's' 
       select word; 
相關問題