Заменить все вхождения строки в данном массиве char / byte в C # - PullRequest
2 голосов
/ 05 августа 2011

Я пришел из C ++, и мне было интересно, существует ли в C # какое-либо волшебство, которое позволило бы мне сделать следующее:

char[] buf = new char[128*1024*1024];
// filling the arr
buf = buf.ToString().Replace(oldstring, newstring).ToArray();

Есть ли шанс сделать это быстро (не писать все вручную) и эффективно (иметь одну копию буфера)?

Ответы [ 3 ]

1 голос
/ 05 августа 2011

Поскольку строки являются неизменяемыми в .NET, наиболее эффективный способ управления ими - использовать класс StringBuilder , , который внутренне обрабатывает их как изменяемые .

* 1006.* Вот пример:
var buffer = new StringBuilder(128*1024*1024);

// Fill the buffer using the 'StringBuilder.Append' method.
// Examples:
// buffer.Append('E');
// buffer.Append("foo");
// buffer.Append(new char[] { 'A', 'w', 'e', 's', 'o', 'm', 'e' });
// Alternatively you can access the elements of the underlying char array directly
// through 'StringBuilder.Chars' indexer.
// Example:
// buffer.Chars[9] = 'E';

buffer = buffer.Replace(oldstring, newstring);
1 голос
/ 05 августа 2011

Если вам нужно остаться с массивом (и вы не можете использовать что-то другое для начала, например, как другие предложили StringBuilder), то нет.Не существует встроенного «нулевого копирования» способа «замены (под) char-массива другим (sub) char-массивом в данном char-массиве».

1 голос
/ 05 августа 2011

Не очень понятно, что такое на самом деле ваш массив символов в коде, но ... Используйте String [] ctor overload , чтобы создать строку из вашего массива char, а после вызова заменить нужными параметрами.

...