2012-10-27 159 views
1

我有這樣的:字符串分割到多維數組

String s = "abcd,efgh,ijkl"; 

我想將其轉換成該編程:

String[,] s = {{"ab","cd"},{"ef","gh"},{"ij","kl"}}; 

字符串的長度可變的。誰能告訴我,我該怎麼做?

+0

是否需要一個二維數組,或將'的String [] []'的工作呢? – dasblinkenlight

回答

2

分成String[][]可以做這樣的:

var res = s.Split(',') 
    .Select(p => Regex.Split(p, "(?<=\\G.{2})")) 
    .ToArray(); 

轉換爲String[,]需要額外的循環:

var twoD = new String[res.Length,res[0].Length]; 
for (int i = 0 ; i != res.Length ; i++) 
    for (int j = 0 ; j != res[0].Length ; j++) 
     twoD[i,j] = res[i][j]; 

二維部分要求所有由,分開的字符串具有相同的長度。另一方面,陣列陣列可以是「鋸齒狀的」,即行可以具有不同的長度。

+0

+1不錯!但是,res是長度爲3的數組的數組,而不是2(兩個字符串和空字符串)。 –

2

你可以用LINQ

s.Split(',').Select(
      x => new string[2] { x.Substring(0, 2), x.Substring(2, 2)} 
).ToArray(); 

或者你可以進行循環

 String s = "abcd,efgh,ijkl"; 
     var l = new List<string[]>(); 
     for (int i = 0; i < s.Length; i += 5) 
      l.Add(new string[2] { s.Substring(i, 2), s.Substring(i + 2, 2) }); 

     String[][] sa = l.ToArray(); 
2

做這個

using System.Linq; 

var s = "ab,cd;ef,gh;ij,kl"; 
var a = s.Split(';').Select(x=>x.Split(',')).ToArray() 

或擴展方法

var a = "ab,cd;ef,gh;ij,kl".ToTwoDimArray(); 

public static class StringExtentions 
{ 
    public static string[][] ToTwoDimArray(this string source, char separatorOuter = ';', char separatorInner = ',') 
    { 
     return source 
       .Split(separatorOuter) 
       .Select(x => x.Split(separatorInner)) 
       .ToArray(); 
    } 
} 
+0

非常感謝你 –

+0

海事組織這是這裏最乾淨的答案 –