Я заметил, что в нашем коде много вызовов string.Split(string[],StringSplitOptions), например:
input.Split(new string[] { "\r\n", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries)
или вот так:
input.Split(new string[] { "\r", "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries)
Моя интуиция подсказывает мне, что я могу заменить их все чем-то вроде этого, чтобы улучшить читабельность (и, возможно, повысить производительность, хотя меня это не так уж и волнует), и что не будет побочных эффектов:
static readonly string CrLfStrings = new char[] { '\r', '\n' };
input.Split(CrLfStrings, StringSplitOptions.RemoveEmptyEntries)
На самом деле, моя интуиция подсказывает мне, что для любого набора символов SC, если string.Split(string[],StringSplitOptions) вызывается с помощью RemoveEmptyEntries и набора строк, включающего все односимвольные строки SC, а все остальные строки состоят только из символов SC, Я мог бы заменить его вызовом string.Split(char[],StringSplitOptions) с помощью RemoveEmptyEntries и SC, и побочных эффектов не будет.Моя догадка верна? Можно ли это доказать? Если да, то я могу с радостью произвести замену везде, даже если я не понимаю окружающий код.
Другими словами, будет ли приведенный ниже метод Compare возвращать true для любой ненулевой строки? Меня не очень интересуют крайние случаи, когда у одного может не хватить памяти, а у другого нет.
using System;
using System.Linq;
private static bool Compare(string input)
{
string[] prev = null;
var funcs = new Func[] { Split0, Split1, Split2 };
for (int i = 0; i < funcs.Length; i++)
{
var curr = funcs(input);
if (i != 0 && !(curr.SequenceEqual(prev)))
{
return false;
}
prev = curr;
}
return true;
}
private static string[] Split0(string input) =>
input.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
private static string[] Split1(string input) =>
input.Split(new string[] { "\r\n", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries);
private static string[] Split2(string input) =>
input.Split(new string[] { "\r", "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
Подробнее здесь: https://stackoverflow.com/questions/783 ... -splitchar
Замена string.Split(string[]) на string.Split(char[]) ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему MSVC не оптимизирует cout для char или const char*, но оптимизирует для int?
Anonymous » » в форуме C++ - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-