2010-04-15 56 views
2

字符串$的C#相當於是否有一個優雅的linqy方式來做到這一點?什麼是從基本

我想要做的就是創建給定長度的字符串到那個長度

所以對於長度由了另一串的倍數 - 9和輸入字符串「XXX」我得到「XXXXXXXXX」(即長度9)

非整數倍然後我想截斷線。

我可以很容易地使用循環和StringBuilder來做到這一點,但我期待看看這種語言能否輕鬆地表達這個想法。

(FYI我正在爲我的兒子復活節數學作業)

+0

我不認爲這就是字符串$所做的是它 – NibblyPig 2010-04-15 22:00:30

回答

3

不,沒什麼簡單和優雅 - 你必須自己基本編碼。

您可以創建一個字符串與一些重複的字符,但OT重複的字符串, 即

string s = new string("#", 6); // s = "######" 

爲了用繩子做到這一點,你就需要一個循環將它們串聯,然後easest會是使用子串以截斷到所期望的最終長度 - 沿着線:

string FillString(string text, int count) 
{ 
    StringBuilder s = new StringBuilder(); 
    for(int i = 0; i <= count/text.Length; i++) 
     s.Add(text); 

    return(s.ToString().Substring(count)); 
} 
+0

Aha字符串構造 - 謝謝。 – 2010-04-16 00:26:39

1

我Linqy(;))解決方案是創建一個擴展方法。 Linq是語言集成查詢,那麼爲什麼濫用?林非常確定這是可能的,因爲你可以創建新的(匿名)對象,但爲什麼...?

+0

我其實是想創建一個字符串的解決方案,而不是如何使用它的,我想我應該用一些很酷的東西在說System.Linq命名空間。你說得對,linq就是查詢。 – 2010-04-16 00:25:10

2

一種可能的方案使用Enumerable.Repeat

const int TargetLength = 10; 

string pattern = "xxx"; 

int repeatCount = TargetLength/pattern.Length + 1; 

string result = String.Concat(Enumerable.Repeat(pattern, repeatCount).ToArray()); 

result = result.Substring(0, TargetLength); 

Console.WriteLine(result); 
Console.WriteLine(result.Length); 
+0

Enumerable.Repeat。這是我一直在尋找的東西,謝謝。 – 2010-04-16 00:26:15