在我最近参加的一次采访中,被问到的编程问题是这样的。编写一个函数,将两个字符串作为输入。输出应该是串联的结果。
条件:不应该使用StringBuffer.Append或StringBuilder.Append或字符串对象进行串联;也就是说,他们要我实现StringBuilder或StringBuffer的Append函数如何工作的伪代码实现。
这就是我所做的:
static char[] AppendStrings(string input, string append)
{
char[] inputCharArray = input.ToCharArray();
char[] appendCharArray = append.ToCharArray();
char[] outputCharArray = new char[inputCharArray.Length + appendCharArray.Length];
for (int i = 0; i < inputCharArray.Length; i++)
{
outputCharArray[i] = inputCharArray[i];
}
for (int i = 0; i < appendCharArray.Length; i++)
{
outputCharArray[input.Length + i] = appendCharArray[i];
}
return outputCharArray;
}
Run Code Online (Sandbox Code Playgroud)
虽然这是一个可行的解决方案,但还有更好的方法吗?
LINQ 合法吗?字符串只是可以被视为字符的枚举,因此它们可以与 LINQ 一起使用(尽管涉及一些成本,请参阅注释):
string a = "foo";
string b = "bar";
string c = new string(a.AsEnumerable().Concat(b).ToArray());
Run Code Online (Sandbox Code Playgroud)
或使用您的方法签名:
static char[] AppendStrings(string input, string append)
{
return input.AsEnumerable().Concat(append).ToArray();
}
Run Code Online (Sandbox Code Playgroud)
您可以致电CopyTo:
char[] output = new char[a.Length + b.Length];
a.CopyTo(0, output, 0, a.Length);
b.CopyTo(0, output, a.Length, b.Length);
return new String(output);
Run Code Online (Sandbox Code Playgroud)
如果他们不喜欢这样,请致电.ToCharArray().CopyTo(...)。
你还可以作弊:
return String.Join("", new [] { a, b });
Run Code Online (Sandbox Code Playgroud)
return String.Format("{0}{1}", a, b);
Run Code Online (Sandbox Code Playgroud)
var writer = new StringWriter();
writer.Write(a);
writer.Write(b);
return writer.ToString();
Run Code Online (Sandbox Code Playgroud)