【问题标题】:Split String into jagged array looplessly将字符串无循环地拆分为锯齿状数组
【发布时间】:2013-02-28 11:53:43
【问题描述】:

我有以下字符串

 String s = "1:2,a;1:3,b;1:4";

我可以按照here 中的示例将字符串划分为两级锯齿状数组,但我无法将其扩展到另一级以拥有更多基于, 的拆分器以在@ 中获得输出987654324@

String[][] f = s.Split( ';' ).Select( t => t.Split( ':' ) ).ToArray();

【问题讨论】:

    标签: c# .net string linq


    【解决方案1】:

    巢,我的美人!

    String[][][] fff = 
        s.Split(';').Select(
            t => t.Split(':').Select(
                u => u.Split(',')
            ).ToArray()
        ).ToArray();
    
    String[][][][] ffff =
    s.Split(';').Select(
        t => t.Split(':').Select(
            u => u.Split(',').Select(
                v => v.Split('.')
            ).ToArray()
        ).ToArray()
    ).ToArray();
    
    String[][][][][] fffff =
    s.Split(';').Select(
        t => t.Split(':').Select(
            u => u.Split(',').Select(
                v => v.Split('.').Select(
                    w => w.Split('/')
                ).ToArray()
            ).ToArray()
        ).ToArray()
    ).ToArray();
    

    如你所见,你想要分割的东西越多,情况就会变得越糟。没有办法让这个递归仍然得到强类型数组,但这里有一个函数可以给你Arrays - 你只需要递归检查每个元素是string还是另一个Array:

    static Array Split(string source, int start, params char[] args)
    {
        var split = source.Split(args[start]);
        if (args.Length == start + 1)
            return split;
        return split.Select(s => Split(s, start + 1, args)).ToArray();
    }
    
    ...
    
    String s = "1:2,a;1:3,b;1:4";
    Array array = Split(s, 0, ';', ':', ',');
    

    【讨论】:

      【解决方案2】:

      试试这个:

      String s = "1:2,a;1:3,b;1:4";
      
      String[][][] f = s.Split(';').Select(t => t.Split(':').Select( e => e.Split(',') ).ToArray()).ToArray();
      

      【讨论】:

        【解决方案3】:

        怎么样:

        s.Split( ';' ).Select(
            t => t.Split( ':' ).Select(
                u => u.Split( ',' )
            ).ToArray()
        ).ToArray();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-14
          • 2019-07-15
          • 2019-08-19
          • 1970-01-01
          相关资源
          最近更新 更多