在Python我可以這樣做:
>>> i = 3
>>> 'hello' * i
'hellohellohello'
我怎樣才能在Python繁殖在C#中的字符串相似?我可以很容易地在for循環中做到這一點,但這會變得乏味和不具表現力。
最終,我寫出了控制檯的遞歸方式,每次調用都會增加一個縮進級別。
parent
child
child
child
grandchild
而且這將是最容易做到"\t" * indent
。
在Python我可以這樣做:
>>> i = 3
>>> 'hello' * i
'hellohellohello'
我怎樣才能在Python繁殖在C#中的字符串相似?我可以很容易地在for循環中做到這一點,但這會變得乏味和不具表現力。
最終,我寫出了控制檯的遞歸方式,每次調用都會增加一個縮進級別。
parent
child
child
child
grandchild
而且這將是最容易做到"\t" * indent
。
this post有一個擴展方法。
public static string Multiply(this string source, int multiplier)
{
StringBuilder sb = new StringBuilder(multiplier * source.Length);
for (int i = 0; i < multiplier; i++)
{
sb.Append(source);
}
return sb.ToString();
}
string s = "</li></ul>".Multiply(10);
爲了防止無限循環,我想使乘數成爲一個乘數。 – Eric 2009-06-05 20:27:02
在C#中沒有這樣的說法;你最好的選擇可能是你自己的MultiplyString()函數。
沒有什麼內置到BCL做到這一點的,但有點LINQ可以做到很輕鬆地任務:
var multiplied = string.Join("", Enumerable.Repeat("hello", 5).ToArray());
每mmyers:
public static string times(this string str, int count)
{
StringBuilder sb = new StringBuilder();
for(int i=0; i<count; i++)
{
sb.Append(str);
}
return sb.ToString();
}
int indent = 5;
string s = new string('\t', indent);
的一種方式做到這一點是以下 - 但它不是很好。
String.Join(String.Empty, Enumerable.Repeat("hello", 3).ToArray())
UPDATE
AHHHH ...我... remeber爲字符...
new String('x', 3)
只要它是唯一一個要重複的性格,有一個字符串的構造函數,你可以使用:
string indentation = new String('\t', indent);
如何用linq集合...
var combined = Enumerable.Repeat(「hello」,5).Aggregate(「」,(agg,current)=> agg + current);
這裏是我如何做到這一點?
string value = new string(' ',5).Replace(" ","Apple");
我不認爲你可以擴展與操作符重載System.String,但你可以做一個字符串包裝類來做到這一點。
public class StringWrapper
{
public string Value { get; set; }
public StringWrapper()
{
this.Value = string.Empty;
}
public StringWrapper(string value)
{
this.Value = value;
}
public static StringWrapper operator *(StringWrapper wrapper,
int timesToRepeat)
{
StringBuilder builder = new StringBuilder();
for (int i = 0; i < timesToRepeat; i++)
{
builder.Append(wrapper.Value);
}
return new StringWrapper(builder.ToString());
}
}
然後調用它像...
var helloTimesThree = new StringWrapper("hello") * 3;
,並從價值...
helloTimesThree.Value;
當然,理智的事情。將有你的功能跟蹤並傳遞當前的深度並將選項卡轉儲出一個for循環。
如果u需要串3倍只是做
string x = "hello";
string combined = x + x + x;
寫一個擴展方法,這樣你就可以做 「你好」 .times(5)。 (如果我知道C#,我會在答案中做到這一點)。 – 2009-06-05 20:23:27
除非C#允許運算符重載;可以? – 2009-06-05 20:24:51
@mmyers將行爲添加到默認類被認爲是有害的 – Eric 2009-06-05 20:24:59