Вставьте символы в строку в C # - PullRequest
3 голосов
/ 18 ноября 2011

Учитывая следующую строку в C #, как бы я вставил символ между каждым символом в строке?

Например: "Hello Sunshine" станет "H.e.l.l.o. .S.u.n.s.h.i.n.e"

Что такоесамый эффективный, самый быстрый способ сделать это в C #?

Ответы [ 5 ]

5 голосов
/ 18 ноября 2011

Как насчет:

string result = string.Join(".", someString.AsEnumerable());

Это скрывает большую часть сложности и будет использовать StringBuilder внутри.

5 голосов
/ 18 ноября 2011

Если вы хотите, чтобы точка после каждого символа использовала StringBuilder:

StringBuilder sb = new StringBuilder(s.Length * 2);
foreach (char c in s) {
    sb.Append(c);
    sb.Append('.');
}
string result = sb.ToString();

Если вам не нужна конечная точка, тогда в .NET 4.0 вы можете использовать string.Join.

string result = string.Join(".", (IEnumerable<char>)s);

В .NET 3.5 и старше второй параметр должен быть массивом, что означает, что вам придется временно создавать массив, чтобы он, скорее всего, был быстрееиспользуйте решение StringBuilder, показанное выше, и используйте первый или последний индекс как особый случай.

Примечание. Зачастую вам не нужно самое эффективное решение, а достаточно быстрое решение.Если для ваших нужд достаточно немного более медленного, но гораздо более простого решения, используйте его вместо ненужной оптимизации производительности.

1 голос
/ 18 ноября 2011

Это мое предложение, я знаю, что это не выглядит супер секси, но я считаю, что это быстрее (в 3 раза быстрее для образца строки) и требует точного объема памяти, чем все те, которые используют Select, Join и все такое джаз : -)

static string ConvertString(string s)
{
    char[] newS = new char[s.Length * 2 + 1];
    int i = 0;
    do
    {
        newS[i] = s[i / 2];
        if (i == (s.Length * 2 - 2))
            break;

        i++;
        newS[i] = '.';
        i++;
    }
    while (true);
    return new string(newS);
}

Плюс не требует Framework 4.

1 голос
/ 18 ноября 2011

Вы заботитесь о производительности на больших струнах?

var result = string.Join(".", str.Select(c => c.ToString());
0 голосов
/ 18 ноября 2011

Ответ Марка, вероятно, более читабелен. Но мне всегда нравится такое решение:

string.Join("", "Hello Sunshine".Select(x => x + "."))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...