2

私は次の文字列を持っています

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

ここからの例に従って、文字列を2レベルのジャグ配列に分割することはできますが,、出力を取得するために基づいてもう1つのスプリッターを持つように、文字列をもう1つのレベルに拡張することはできません。string[][][] f

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

3 に答える 3

3

ネスト、私の可愛い人!

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 を返す関数を次に示します。各要素が a である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, ';', ':', ',');
于 2013-02-28T11:59:46.890 に答える
1

どうですか:

s.Split( ';' ).Select(
    t => t.Split( ':' ).Select(
        u => u.Split( ',' )
    ).ToArray()
).ToArray();
于 2013-02-28T11:57:28.387 に答える
1

これを試してください:

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

String[][][] f = s.Split(';').Select(t => t.Split(':').Select( e => e.Split(',') ).ToArray()).ToArray();
于 2013-02-28T11:59:19.137 に答える