2012-10-27 160 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

海事组织这是这里最干净的答案 –