Joe Duffy's Blog подразумевает использование string.Substring
более эффективно, чем string.Split
.Как String.Substring эффективнее String.Split?
Я не знаю, если его высказывание Substring
не выделяет новую строку или если она более эффективна, потому что она не делает ненужных распределений. Не могли бы вы объяснить, насколько это более эффективно и показать пример.
Я понимаю его первый пример как создание массива, а затем обработку каждой из строк в массиве.
string str = ...;
string[] substrs = str.Split(',');
foreach (string subtr in substrs) {
Process(substr);
}
Как нижеследующее более эффективным
string str = ...;
int lastIndex = 0;
int commaIndex;
while ((commaIndex = str.IndexOf(',', commaIndex)) != -1) {
Process(substr, lastIndex, commaIndex);
lastIndex = commaIndex + 1;
Что я вижу, использует String.IndexOf
, чтобы найти индекс запятой, то обработка строки. Я предполагаю, что он намерен использовать String.Substring
для извлечения данных во время его обработки. Один из приведенных ниже комментариев предложил, чтобы он потянул его за персонаж. Будет ли он тянуть персонажей, пока он не ударит следующую запятую, возможно, создав массив символов?
Да sting.Index of используется для поиска Индекса запятой, но внутри вашего гипотетического метода обработки вам все равно понадобится сделать подстроку для извлечения данных внутри этих индексов. правильно? –
Я стою исправлен - пример действительно запутанный – BrokenGlass
«Есть API-интерфейсы наземных мин, скрытые там, такие как String.Split и String.Substring» подразумевает, что он считает, что подстрока не эффективна. И я думаю, что «у String есть индекс, и он безопасен по типу! Поэтому синтаксический анализ на месте, по крайней мере, не приведет к переполнению буфера» подразумевает, что он намерен получить доступ к символу подстроки по символу, а не используя 'Подстрока'. – Blorgbeard