我来自C ++背景,并想知道在C#中是否存在任何可以让我执行以下操作的魔法:
char[] buf = new char[128*1024*1024];
// filling the arr
buf = buf.ToString().Replace(oldstring, newstring).ToArray();
是否有机会快速完成(不是手工编写所有内容)和高效(有一份缓冲区)?
答案 0 :(得分:1)
不太清楚真正你的char数组在提供的代码中是什么,但...... 使用String[] ctor overload从char数组构造字符串,并在调用replace之后使用所需的参数。
答案 1 :(得分:1)
由于字符串在.NET中是不可变的,因此操作它们的最有效的内存方式是使用StringBuilder类which internally treats them as mutable。
以下是一个例子:
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);
答案 2 :(得分:1)
如果您需要继续使用数组(并且不能使用其他内容开头,例如其他人建议使用StringBuilder
),那么不。没有内置的“零复制”方式“将(子)char数组替换为给定char数组中的另一个(子)char数组”。