2012-12-13 28 views
3

只是我正在調查的好奇心。用LINQ/extensions方法重複字符串

問題:簡單地重複(相乘,有人會說)字符串/字符n次。
我知道這個目標有Enumerable.Repeat,但我試圖沒有它。 LINQ在這種情況下,似乎沒什麼用處,因爲在查詢

from X in "s" select X 

「S」正在探索等X是焦炭。因爲例如「s」,所以擴展方法也是如此。 集合(blablabla)將再次處理字符's',而不是字符串本身。爲了重複字符串,需要「外部」的東西,所以我認爲lambdas代表,但它不能沒有聲明一個變量來分配委託/ lambda表達式。
因此,像定義一個函數,把它內聯:

((a)=>{return " "+a;})("a"); 

delegate(string a){return " "+a}(" "); 

會給一個「沒有名字」的錯誤(等沒有遞歸,據我所知,即使通過傳遞可能的lambda /委託作爲參數),並且最終甚至不能由C#創建,因爲它的侷限性。
這可能是我從錯誤的角度看待這件事。有任何想法嗎?
這只是一個實驗,我不關心表演,關於記憶的使用...只是它是一條線和某種自主的。也許我們可以用Copy/CopyTo來做些什麼,或者把它轉換成其他的集合,我不知道。 反射也被接受。

+0

差不多;我想避免enumerable.repeat – lunadir

+0

您是否閱讀過該文章的答案?它使用字符串構造函數,而不是'Enumerable.Repeat'。 –

+0

它重複一個字符,好的,但一個字符串 – lunadir

回答

2

如果你想重複一個字符串,而不是一個人物,一個簡單的辦法是使用StringBuilder.Insert method,這需要插入索引和計數的重複次數的使用方法:

var sb = new StringBuilder(); 
sb.Insert(0, "hi!", 5); 
Console.WriteLine(sb.ToString()); 

否則,要重複單個字符,請按照我在similar question here的註釋中提到的那樣使用字符串構造函數。例如:

string result = new String('-', 5); // ----- 

爲了完整起見,值得注意的是,StringBuilder提供overloaded Append method可以重複一個字符,但具有用於字符串沒有這樣的過載(這是其中Insert方法進來)。如果這是我所感興趣的,我寧願使用字符串構造函數StringBuilder。但是,如果我已經在使用StringBuilder,則可以使用Append方法從某些鏈接中受益。這裏有一個人爲的例子來演示:

var sb = new StringBuilder("This item is "); 
sb.Insert(sb.Length, "very ", 2) // insert at the end to append 
    .Append('*', 3) 
    .Append("special") 
    .Append('*', 3); 
Console.WriteLine(sb.ToString()); // This item is very very ***special*** 
+0

stringbuilder,明白了 – lunadir

6

要重複一個字符n次,你不會用Enumerable.Repeat只是this string constructor

string str = new string('X', 10); 

要重複一個字符串,我不知道還有比使用string.JoinEnumerable.Repeat

string foo = "Foo"; 
string str = string.Join("", Enumerable.Repeat(foo, 10)); 

更好編輯:如果您不需要分隔符,您可以使用string.Concat

string str = string.Concat(Enumerable.Repeat(foo, 10)); 
+0

我沒有看到,很有用;你知道重複一個字符串的東西,甚至? – lunadir

+0

@lunadir:編輯我的答案。 –