Построить многоуровневый массив массивов/зубчатый массив из проанализированной строки

Я пытался расширить свой код, чтобы включить массив 3-го уровня на основе некоторых строк, это то, что я пытался сделать, но я могу сделать это только для массива второго уровня с моим пониманием кода.

string a = "{50,8,10} Grade 1; {70,10,45} Grade 2; {80,20,65} Grade 3: {90,100,23} Grade 4; {98,99,32} Grade 5; {100,1000,7} Grade 6";

        int[][][] test =
            a.Split(':')
             .Select(t => Regex.Matches(t, @"(?<={).*?(?=})"))
             .Cast<MatchCollection>()
             .Select(m => m.Cast<Match>()
                 .Select(n => n.ToString().Split(',')
                     .Select(int.Parse))
                     .ToArray())
                 .ToArray()
             .ToArray();

поэтому каждый раздел массива будет выглядеть примерно так

        //int[][][] { {50,8,10} Grade 1; {70,10,45} Grade 2; {80,20,65} Grade 3 }
        //    int[][] { {50,8,10},{70,10,45},{80,20,65} }
        //        int[] {50,8,10}

в любом случае, я все еще новичок в программировании, и я просто погружаюсь в него и учусь на ходу. если есть более эффективный способ справиться с этим, помимо использования массивов, я открыт для предложений,


person VincEclipsE    schedule 17.01.2013    source источник
comment
Вы смотрели Словарь‹›?   -  person Manuel    schedule 17.01.2013
comment
Нет, я должен буду взглянуть на это.   -  person VincEclipsE    schedule 17.01.2013
comment
Что вы пытаетесь моделировать? Не подгоняйте свою модель под тип хранилища - разберитесь, что хотите хранить, а потом храните :-)   -  person dash    schedule 17.01.2013
comment
так что общая картина такова, у меня есть строка, которая случайным образом вытягивается из файла, типичная выглядит так | | | | | | | 3 | {10,0} d4; {20,0} d6; {30,0} d8; {40,0} d10; {50,0} д12; {60,0} d20; {70,0} d30; {80,0} %d10; {90,0} d100; {100,0} d1000 : {0,0,0} тест1; {0,0,0} тест2 : {0,0,0} тест3 | код анализирует строку, чтобы найти значения между | и помещает их в память для последующего использования, значения всегда разные, и массивы в извлеченной строке всегда разные. Так что мне нужно искать маркеры, которые определяют, что есть что.   -  person VincEclipsE    schedule 17.01.2013


Ответы (1)


Ваш код на самом деле почти правильный. Я думаю, что там был просто ) не к месту (я тоже немного подчистил форматирование).

int[][][] test = a.Split(':')
                  .Select(t => Regex.Matches(t, @"(?<={).*?(?=})"))
                  .Cast<MatchCollection>()
                  .Select(m => m.Cast<Match>()
                                .Select(n => n.ToString().Split(',')
                                              .Select(int.Parse)
                                              .ToArray())
                                .ToArray())
                  .ToArray();

Однако int[][][] — не самая эффективная структура данных — вместо нее вы можете рассмотреть Dictionary<string, List<int>>.

person Bobson    schedule 17.01.2013
comment
о, ничего себе, я ломал голову над этим, я просто не мог понять, что я делаю неправильно, поэтому я переписал это 12 раз безрезультатно. - person VincEclipsE; 18.01.2013