кратчайший способ получить первый символ из каждого слова в строке - PullRequest
6 голосов
/ 17 января 2011

Я хочу кратчайший способ получить 1-й символ каждого слова в строке в C #.

Я сделал следующее:

string str = "This is my style";
string [] output = str.Split(' ');
foreach(string s in output)
{
   Console.Write(s[0]+" ");
}

// Output
T i m s

Я хочу отобразить тот же вывод скратчайший путь ...

Спасибо

Ответы [ 4 ]

16 голосов
/ 17 января 2011
var firstChars = str.Split(' ').Select(s => s[0]);

Если производительность критична:

var firstChars = str.Where((ch, index) => ch != ' ' 
                       && (index == 0 || str[index - 1] == ' '));

Второе решение менее читаемо, но зацикливайте строку один раз.

11 голосов
/ 17 января 2011
string str = "This is my style"; 
str.Split(' ').ToList().ForEach(i => Console.Write(i[0] + " "));
1 голос
/ 17 января 2011

Я думаю, что ваше решение прекрасно, но если вы хотите более высокую производительность, вы можете попробовать:

string str = "This is my style";
Console.Write(str[0]);
for(int i = 1; i < str.Length; i++)
{
    if(str[i-1] = " ")
        Console.Write(" " + str[i]);
}

Вы можете получить более низкий постоянный коэффициент с этим кодом, но он все еще работает в O (n).Кроме того, я предполагаю, что в строке никогда не будет больше одного пробела, и он не будет начинаться с пробела.

Если вы хотите написать меньше кода, вы можете попробовать:

str result = str.Split(" ").Select(y => y[0]).ToList();

Или что-то.

0 голосов
/ 17 января 2011

Регулярные выражения могут быть ответом:

  Regex.Matches(text, @"\b(\w{1})")
    .OfType<Match>()
    .Select(m => m.Groups[1].Value)
    .ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...