什么\t
是在C#中生成字符串的最佳方法
我正在学习C#并尝试不同的方式来说同样的事情.
Tabs(uint t)
是返回的功能string
与t
的量\t
的
例如Tabs(3)
返回"\t\t\t"
这三种实施方式中哪Tabs(uint numTabs)
一种最好?
当然,这取决于"最佳"的含义.
LINQ版本只有两行,很不错.但重复和聚合的调用是否会不必要地耗费时间/资源?
该StringBuilder
版本是很清楚的,但是是StringBuilder
类莫名其妙慢?
该string
版本是基本的,这意味着它很容易理解.
这根本不重要吗?它们都是平等的吗?
这些都是帮助我更好地了解C#的问题.
private string Tabs(uint numTabs)
{
IEnumerable<string> tabs = Enumerable.Repeat("\t", (int) numTabs);
return (numTabs > 0) ? tabs.Aggregate((sum, next) => sum + next) : "";
}
private string Tabs(uint numTabs)
{
StringBuilder sb = new StringBuilder();
for (uint i = 0; i < numTabs; i++)
sb.Append("\t");
return sb.ToString();
}
private string Tabs(uint numTabs)
{
string output = "";
for (uint i = 0; i < numTabs; i++)
{
output += '\t';
}
return output;
}
Run Code Online (Sandbox Code Playgroud)
CMS*_*CMS 1400
那这个呢:
string tabs = new String('\t', n);
Run Code Online (Sandbox Code Playgroud)
n
您想要重复字符串的次数在哪里.
或更好:
static string Tabs(int n)
{
return new String('\t', n);
}
Run Code Online (Sandbox Code Playgroud)
Car*_*lin 135
string.Concat(Enumerable.Repeat("ab", 2));
Run Code Online (Sandbox Code Playgroud)
返回
"ABAB"
和
string.Concat(Enumerable.Repeat("a", 2));
Run Code Online (Sandbox Code Playgroud)
返回
"AA"
从...
Bin*_*ony 120
在所有版本的.NET中,您可以重复一个字符串:
public static string Repeat(string value, int count)
{
return new StringBuilder(value.Length * count).Insert(0, value, count).ToString();
}
Run Code Online (Sandbox Code Playgroud)
重复一个角色,new String('\t', count)
是你最好的选择.请参阅@CMS的答案.
Kon*_*lph 62
最好的版本肯定是使用内置方式:
string Tabs(int len) { return new string('\t', len); }
Run Code Online (Sandbox Code Playgroud)
在其他解决方案中,更喜欢最简单; 只有当这证明太慢时,才能寻求更有效的解决方案.
如果你
废话:当然上面的代码更有效率.StringBuilder
事先使用a 并知道它的结果长度,那么也使用适当的构造函数,这样更有效,因为它意味着只进行一次耗时的分配,并且没有不必要的数据复制.
Rod*_*man 51
扩展方法:
public static string Repeat(this string s, int n)
{
return new String(Enumerable.Range(0, n).SelectMany(x => s).ToArray());
}
public static string Repeat(this char c, int n)
{
return new String(c, n);
}
Run Code Online (Sandbox Code Playgroud)
Ron*_*nie 40
那么使用扩展方法呢?
public static class StringExtensions
{
public static string Repeat(this char chatToRepeat, int repeat) {
return new string(chatToRepeat,repeat);
}
public static string Repeat(this string stringToRepeat,int repeat)
{
var builder = new StringBuilder(repeat*stringToRepeat.Length);
for (int i = 0; i < repeat; i++) {
builder.Append(stringToRepeat);
}
return builder.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以写:
Debug.WriteLine('-'.Repeat(100)); // For Chars
Debug.WriteLine("Hello".Repeat(100)); // For Strings
Run Code Online (Sandbox Code Playgroud)
请注意,对于简单字符而不是字符串使用stringbuilder版本的性能测试会给你一个主要的性能压力:在我的计算机上,测量性能的差异在1:20之间:Debug.WriteLine(' - '.重复(1000000)) // char版本和
Debug.WriteLine(" - ".重复(1000000))//字符串版本
小智 22
这个怎么样:
//Repeats a character specified number of times
public static string Repeat(char character,int numberOfIterations)
{
return "".PadLeft(numberOfIterations, character);
}
//Call the Repeat method
Console.WriteLine(Repeat('\t',40));
Run Code Online (Sandbox Code Playgroud)
Cha*_*imG 20
我知道这个问题已经有五年了,但有一种简单的方法可以重复一个甚至可以在.Net 2.0中运行的字符串.
要重复一个字符串:
string repeated = new String('+', 3).Replace("+", "Hello, ");
Run Code Online (Sandbox Code Playgroud)
返回
"你好你好你好, "
要将字符串重复为数组:
// Two line version.
string repeated = new String('+', 3).Replace("+", "Hello,");
string[] repeatedArray = repeated.Split(',');
// One line version.
string[] repeatedArray = new String('+', 3).Replace("+", "Hello,").Split(',');
Run Code Online (Sandbox Code Playgroud)
返回
{"你好你好你好", ""}
把事情简单化.
Ray*_*ega 17
你的第一个例子使用Enumerable.Repeat
:
private string Tabs(uint numTabs)
{
IEnumerable<string> tabs = Enumerable.Repeat(
"\t", (int) numTabs);
return (numTabs > 0) ?
tabs.Aggregate((sum, next) => sum + next) : "";
}
Run Code Online (Sandbox Code Playgroud)
可以通过以下方式更紧凑地重写String.Concat
:
private string Tabs(uint numTabs)
{
return String.Concat(Enumerable.Repeat("\t", (int) numTabs));
}
Run Code Online (Sandbox Code Playgroud)
bra*_*ing 14
使用String.Concat
和使用Enumerable.Repeat
哪个比使用便宜String.Join
public static Repeat(this String pattern, int count)
{
return String.Concat(Enumerable.Repeat(pattern, count));
}
Run Code Online (Sandbox Code Playgroud)
var str = new string(Enumerable.Repeat('\t', numTabs).ToArray());
Run Code Online (Sandbox Code Playgroud)