2010-12-11 9 views
0

Ich habe eine zweidimensionale Char-Array mit vier Strings deklariert.Bedingte Deklaration von Arrays in zweidimensionalen Char-Array?

private static string string1 = "abcde"; 
private static string string2 = "ABCDE"; 
private static string string3 = "12345"; 
private static string string4 = "67890"; 

public string selectChars(bool includeOne, bool includeTwo, bool includeThree, bool includeFour) 
{ 
    char[][] charGroups = new char[][] 
    { 
     string1.ToCharArray(), 
     string2.ToCharArray(), 
     string3.ToCharArray(), 
     string4.ToCharArray() 
    }; 
} 

Ich möchte deklariert und initialisiert das Array, so dass die Zeichenfolge Add bedingten basiert auf vier Bool Flags. Wenn zum Beispiel includeOne und includeThree true sind, möchte ich mit einer charGroup [2] [5] enden, die string1 und string3 verwendet.

(Dies ist ein bestehender Code, bei dem ich nicht radikal ändern möchte Wenn ich das Array in diesem Block bedingt deklarieren kann, bin ich fertig.)

+0

Möchten Sie Ihr Problem durch Probe erklären. –

+0

Ich fügte meiner Beschreibung etwas mehr Fleisch hinzu. Hoffe es ist genug. – alphadogg

Antwort

0

Die Art und Weise Sie wollen, ist wie eine Liste, so ist es besser, sie durch die Liste implementieren und dann ein Array zurück durch ToArray:

public string selectChars(bool includeOne, bool includeTwo, bool includeThree, bool includeFour) 
{ 
     List<char[]> chars = new List<char[]>(); 
     string string1 = ""; 
     if (includeOne) 
      chars.Add(string1.ToCharArray()); 
     if(includeTwo) .... 

     char[][] charGroups = chars.ToArray(); 
} 
+0

Das funktioniert. Ich dachte mir, dass ich zu einer dynamischeren Struktur gehen müsste, fragte aber, ob ich einen einfacheren Ansatz übersehen hätte. – alphadogg

-2

1) Zählen Sie, wie viele Strings hinzugefügt werden müssen (wie viele der Flags sind wahr).

2) char[][] charGroups = new char[count][]; (Möglicherweise müssen char[][count] sein, ich auf sehr wenig Schlaf bin Betrieb)

3) Init einen Index auf 0; Für jedes Flag, wenn es gesetzt ist, setze den entsprechenden char[] in diesen Index und inkrementiere den Index.

Aber warum, oh warum nehmen Sie die String s auseinander in char[] s? Die String Klasse ist dein Freund. Es will dir das Leben erleichtern.

0

Ich habe nicht die VM gehen, aber ich denke, das sollte funktionieren ...

private static string string1 = "abcde"; 
private static string string2 = "ABCDE"; 
private static string string3 = "12345"; 
private static string string4 = "67890"; 

public string selectChars(bool includeOne, bool includeTwo, bool includeThree, bool includeFour) 
{ 
    char[][] charGroups = new char[][] 
    { 
     include1 ? string1.ToCharArray() : new char[0], 
     include3 ? string2.ToCharArray() : new char[0], 
     include3 ? string3.ToCharArray() : new char[0], 
     include4 ? string4.ToCharArray() : new char[0] 
    }; 
} 

Wenn alles, was Sie tun möchten, ist die Zeichenfolge als ein Zeichenarray enthalten, wenn ihre jeweiligen Flag dann gesetzt I denke, das wird den Trick machen. Es verwendet den Bedingungsoperator, um die linke Seite von ':' einzuschließen (wenn includeX wahr ist), andernfalls die rechte Seite.

+0

Werden leere Arrays hinzugefügt? IOW, wird es vier gezackte Arrays im charGroup-Array geben, von denen einige Arrays der Länge Null oder eine exakte Anzahl von Arrays sein können? – alphadogg