我有以下函数,它将一个字符串作为参数并重复多次(也是一个参数)。我觉得这已经存在于框架中,或者至少可以做得更好。有什么建议吗?
private string chr(string s, int repeat)
{
string result = string.Empty;
for (int i = 0; i < repeat; i++)
{
result += s;
}
return result;
}
答案 0 :(得分:5)
您可以对您的功能进行的最重要的改进是为其提供一个描述性名称。
答案 1 :(得分:4)
我使用StringBuilder
,因为您可能正在分配和解除分配大量字符串:
private string chr(string s, int repeat)
{
StringBuilder result = new StringBuilder();
for (int i = 0; i < repeat; i++)
{
result.Append(s);
}
return result.ToString();
}
如果字符串只是一个字符,那就更好了:
private string chr(char s, int repeat)
{
StringBuilder result = new StringBuilder();
result.Append(s, repeat);
return result.ToString();
}
答案 2 :(得分:4)
不是最有效但最简洁的:
.NET 4:
String.Join(String.Empty, Enumerable.Repeat(s, repeat));
.NET 3.0 / 3.5:
String.Join(String.Empty, Enumerable.Repeat(s, repeat).ToArray());
答案 3 :(得分:4)
如果您的输入实际上是单个字符而不是字符串,则可以执行此操作:
var someChar = 'f';
var repeat = 10;
var repeated = new String(someChar, repeat);
否则,我不认为除了使用StringBuilder
而不是连接之外还有很多其他事情要做:
private string chr(string s, int repeat)
{
var result = new StringBuilder(s.Length * repeat);
for (int i = 0; i < repeat; i++)
{
result.Append(s);
}
return result.ToString();
}
答案 4 :(得分:4)
private string chr (string s, int repeat) {
string result = new String(' ', repeat).Replace(" ", s);
return result;
}
答案 5 :(得分:3)
功能性编程风格的方法:
(至少需要C#3.0)
static class StringRepetitionExtension
{
public static string Times(this int count, string what)
{
return count > 0 ? string.Concat(what, (count-1).Times(what))
: string.Empty;
}
}
<强>用法:强>
3.Times("Foobar") // returns "FoobarFoobarFoobar"
(当然不是最有效的解决方案,并且由于递归,总是存在堆栈溢出的危险,count
的值不合理地大;但是我想分享一个稍微不同的,容易的 - 理解方法。)
答案 6 :(得分:3)
return new System.Text.StringBuilder().Insert(0,"repeatme",count).ToString()
答案 7 :(得分:1)
如果您的repeat参数非常大,您可能需要考虑使用StringBuilder。
http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx
http://channel9.msdn.com/forums/TechOff/14294-C-string-vs-StringBuilder/
答案 8 :(得分:1)
private string chr(string s, int repeat)
{
return Enumerable.Range(0, repeat)
.Aggregate(new StringBuilder(), (sb, i) => sb.Append(s)).ToString();
}