从解析的字符串构建多级数组/锯齿状数组

时间:2013-01-17 15:48:05

标签: c# regex string parsing jagged-arrays

我一直在尝试扩展我的代码以包含基于某些字符串的第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}

无论如何,我对编程还是很陌生,而且我一直在深入研究并随时学习。如果除了使用数组之外还有一种更有效的方法来处理这个问题,我愿意接受建议,

1 个答案:

答案 0 :(得分: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>>