Замена переменной в строке - PullRequest
0 голосов
/ 06 октября 2018

Разработка приложения на c # для замены переменных в строках.

Нужны предложения, как сделать это очень эффективно?

private string MyStrTr(string source, string frm, string to)
    {
        char[] input = source.ToCharArray();
        bool[] replaced = new bool[input.Length];

       for (int j = 0; j < input.Length; j++)
            replaced[j] = false;

        for (int i = 0; i < frm.Length; i++)
        {
            for(int j = 0; j<input.Length;j++)
                if (replaced[j] == false && input[j]==frm[i])
                {
                    input[j] = to[i];
                    replaced[j] = true;
                }
        }
        return new string(input);
    }

Над кодом работает нормально, но каждая переменная должна проходить через строкусогласно переменной count.

Точное требование.

parent.name = am;
parent.number = good;
I {parent.name} a {parent.number} boy.
output should be I am a good boy.

думаю, что источник будет огромным.

Например, если у меня есть 5 различных переменных, нужно пройти через полную строку 5раз.

Нужны предложения, как обрабатывать переменные parellely во время первого обхода?

1 Ответ

0 голосов
/ 07 октября 2018

Я думаю, что вы страдаете от преждевременной оптимизации.Сначала напишите простейшую вещь и посмотрите, работает ли она для вас.Если вы не испытываете проблем с производительностью, то все готово.Не тратьте время на попытки сделать это быстрее, если вы не знаете, как это быстро, или если это является причиной вашей проблемы с производительностью.

Кстати, Условия использования Facebook, вся HTML-страницаэто включает в себя много Javascript, всего 164 килобайта.Это не особенно велико.

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

string result = source.Replace("{parent.name}", "am");
result = result.Replace("{parent.number}", "good");
// more replacements here

return result;

Это немного отработает сборщик мусора, но это не должно быть проблемой, если у вас действительно огромная страница или полный набор замен.

Потенциально вы можете сэкономить некоторую сборку мусора, преобразовав строку в StringBuilder и вызвав StringBuilder.Replace несколько раз.Честно говоря, я не знаю, окажет ли это какое-либо заметное влияние.Я не знаю, как реализован StringBuilder.Replace.

Есть способ сделать это быстрее, написав код, который будет анализировать строку и выполнять все замены за один проход.Хотя кода много.Вы должны построить конечный автомат из нескольких строк поиска и пройти по тексту source по одному символу за раз.Это выполнимо, но это достаточно сложная задача, которую вы, вероятно, не захотите делать, если простой метод не работает достаточно быстро.

...