Условное объявление массивов в двумерном массиве char? - PullRequest
0 голосов
/ 11 декабря 2010

У меня есть двумерный массив char, объявленный с четырьмя строками.

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()
   };
}

Я хочу объявить и инициализировать массив так, чтобы строка add была условной на основе четырех флагов bool. Например, если includeOne и includeThree имеют значение true, я хочу закончить с charGroup [2] [5], использовав string1 и строку 3.

(Это существующий код, в котором я не хочу радикально изменять остальную часть кода. Если я смогу условно объявить массив в этом блоке, все готово.)

Ответы [ 3 ]

0 голосов
/ 12 декабря 2010

У меня не работает VM, но я думаю, что это должно работать ...

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]
   };
}

Если все, что вы хотите сделать, это включить строку в виде символьного массива, если установлен соответствующий флаг, то я думаю, что это поможет. Он использует условный оператор для включения левой части ':' (если includeX имеет значение true), в противном случае включает правую часть.

0 голосов
/ 12 декабря 2010

Требуемый способ подобен списку, поэтому лучше реализовать его по списку, а затем вернуть массив как 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 голосов
/ 11 декабря 2010

1) Подсчитайте, сколько строк нужно добавить (сколько флагов истинно).

2) char[][] charGroups = new char[count][]; (может потребоваться char[][count]; я работаю очень мало)

3) Инициируйте индекс до 0; для каждого флага, если он установлен, поместите соответствующий char[] в этот индекс и увеличьте индекс.

Но почему, о, почему вы разделяете String с на char[] с? String класс - ваш друг. Он хочет сделать вашу жизнь проще.

...