Как вернуть все слова, которые начинаются и заканчиваются определенными символами? - PullRequest
4 голосов
/ 10 августа 2011

У меня есть список слов следующим образом:

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 букв, которые начинаются с буквы "a" и имеют "t" в качестве 5-й буквы, результат долженверните слова "аббаты" и "абнаты".

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

Какой пункт мне нужно добавить, чтобы выполнить 5-ю букву, это требование 't'?

Ответы [ 5 ]

7 голосов
/ 10 августа 2011
var result = from w in words
             where w.Length == 6 && w.StartsWith("a") && w[4] == 't'
             select w;
1 голос
/ 10 августа 2011

В ответ на ваш пересмотренный вопрос, если вы хотите проверить последние две буквы, вы можете использовать метод 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;
1 голос
/ 10 августа 2011

Я протестировал следующий код, и он дал правильные результаты:

var result = from w in words
             where w.StartsWith("a") && w.Length == 6 && w.Substring(4, 1) == "t"
             select w;
1 голос
/ 10 августа 2011
// 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 голос
/ 10 августа 2011

Вы можете использовать индексатор:

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

Без проверки Length это вызовет исключение для более мелких слов.

Помните, что индексатор начинается с нуля.

...