2012-05-18 18 views
0

我想將一個字符串分解使用LINQ如何分割字符串(不是字符,但對指數)

輸入:

ABCDEFGHI 

輸出:

ABC, DEF, GHI 

一種方式是通過使用For Loop。

string str = "ABCDEFGHI"; 

List<string> lst = new List<string>(); 

string temp = ""; 

for(int i = 0; i < str.Length; i++) 
{ 
    temp = str[i].Tostring(); 

    if((i + 1) % 3 == 0) 
    { 
     lst.Add(temp); 
     temp = ""; 
    } 
} 

string final_str = string.Join(", ", lst); 

但如何使用LINQ

+2

很多的選擇這裏:http://stackoverflow.com/questions/1396048/c-sharp-elegant-way-of-partitioning-a-list/ – Scroog1

回答

0

的幫助和另一個(沒有MoreLinq):使用MoreLinq.Batch

var str = "ABCDEFGHI"; 
var tmp = str.Select((i, index) => new { i, index }) 
      .GroupBy(g => g.index/3, e => e.i) 
      .Select(g => String.Join("", g)); 
var final_string = String.Join(", ", tmp); 
0
var str = "ABCDEFGHI"; 

var result = testStr.Select(s => testStr.IndexOf(s)) 
        .Where(i => i%3 == 0) 
        .Select(i => testStr.Substring(i,3)) 
        .Aggregate("", (a,s) => a += s + ","); 
+0

將不會工作,如果任何字符出現多次在字符串 – sloth

+1

苛刻downvote for假設示例字符串非常具體。 – Aidan

+0

mmh,好的。你對這個例子的字符串非常具體,不太清楚。我刪除了downvote。但Nikhil提供的代碼可以用於其他字符串,而不是。 – sloth

-1
String.Join("", str.Select((x, i) => (i + 1)%3 == 0 ? x + " " : x.ToString())) 
+0

將不起作用,因爲如果字符串的長度可以被3整除,則會添加額外的逗號來添加字符串的末尾。 – sloth

+0

啊,是的,我甚至沒有看到逗號。 :)它當然可以修剪,這會使得這個調用比你的版本更短。 – BlueVoodoo

+0

給出錯誤。請再檢查一次。 –

0

隨着MoreLinq

List<string> lst = str.Batch(3).Select(s => String.Join("",s)).ToList(); 
+0

@Downvoter任何原因? –

0

結果的類型是IEnumerable的>,ToArray的可以用來使它的IEnumerable <的char []>

編輯我忘了最後一個加入的語句在第一眼

var finalStr = String.Join(",",str.Batch(3).Select(x=>new String(x.ToArray())))