2012-02-24 12 views
8

Ho la seguente stringa:Come Spalato String con contenenti parentesi in array multi-dimensionale

"(X,Y,Z),(A,B,C),(R,S,T)" 

voglio dividere questo in un array multi-dimensionale:

arr[0] = [x,y,z] 
arr[1] = [a,b,c] 
arr[2] = [r,s,t] 

in modo che:

arr[0][1] = y, arr[0][2] = z, etc. 

posso farlo mettendo a nudo la prima e l'ultima parentesi, dividendo on "), (" e poi scorrendo che ARRA y e facendo un'altra divisione. Ma mi sento sporco, impuro, come una spogliarellista (gioco di parole) in un bar di backalley ... c'è un modo più pulito?

Forse qualche LINQ in soccorso?

Sto usando C#.

+0

Sapete per certo che sarà un array bidimensionale e non frastagliato? –

+0

Sì, sempre bidimensionale, sempre lo stesso numero di elementi nella seconda dimensione (3) – OpenR

+0

Vuoi un array scalettato (come il tuo codice) o un array 2D? –

risposta

5
string data = "(X,Y,Z),(A,B,C),(R,S,T)"; 

string[][] stringses = data.Trim('(', ')') 
    .Split(new[] {"),("}, StringSplitOptions.RemoveEmptyEntries) 
    .Select(chunk => chunk.Split(',')) 
    .ToArray(); 
+0

grazie per la risposta! – OpenR

3

Si dovrebbe essere in grado di fare un jagged array (il tuo codice mostra) da questo, con la scissione di stringa e LINQ abbastanza facilmente:

string original = "(X,Y,Z),(A,B,C),(R,S,T)"; 

string[] groups = original.Trim('(',')') 
        .Split(new[] {"),("}, StringSplitOptions.RemoveEmptyEntries); 
string[][] results = groups.Select(g => g.Split(',')).ToArray(); 
+0

grazie, per la risposta! +1 per la risposta prima. – OpenR

0

È possibile ottenere i dati con le espressioni regolari

Un'espressione reqular è: (\(([A-Z]+)\,?\))+ questo ti darà x, y, z in gruppi .. e poi aggiungili nel tuo secondo array di dimensioni :)

3

Regex sei tu amico. ecco un semplice frammento di codice che fa per te.

var input = @"(X,Y,Z),(A,B,C),(R,S,T)"; 
var pattern = @"[A-Za-z,]+\b"; 

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

foreach (Match m in Regex.Matches(input, pattern)) 
{ 
    List<string> values = m.Value.Split(',').ToList<string>(); 
    twoDimentionList.Add(values) 
} 

Spero che questo aiuti!

Problemi correlati