c#将锯齿状数组复制到字符串

Azu*_*iva 1 c# arrays jagged-arrays

我的函数应该用"&"";"分割字符串 和","并返回三个锯齿状阵列,反之亦然.(来自以下数据:1,2,3; 4,5,6和1,2,3; 4,5,6)

我一直在努力使它工作,现在由于某种原因我得到一个system.argumentnullexception on

Array.Copy(playerOneEnts, allEnts[0], playerOneEnts.Length);
Array.Copy(playerTwoEnts, allEnts[1], playerTwoEnts.Length);
Run Code Online (Sandbox Code Playgroud)

完整代码:

public string convertToString(string[][][] allEnts)
{
    string Player = string.Empty;
    string[][] playerOneEnts = new string[maxEnts][];
    string[][] playerTwoEnts = new string[maxEnts][];

    Array.Copy(allEnts[0], playerOneEnts, allEnts[0].Length);
    Array.Copy(allEnts[1], playerTwoEnts, allEnts[1].Length);

    for (int j = 0; j < playerOneEnts.Length; j++)
    {
        for (int i = 0; i < playerOneEnts[j].Length; i++)
        {
            Player += playerOneEnts[j][i] + ",";
        }

        Player = Player.TrimEnd(',');
        Player += ";";
    }

    Player = Player.TrimEnd(';');
    Player += "&";

    for (int j = 0; j < playerTwoEnts.Length; j++)
    {
        for (int i = 0; i < playerTwoEnts[j].Length; i++)
        {
            Player += playerTwoEnts[j][i] + ",";
        }

        Player = Player.TrimEnd(',');
        Player += ";";
    }

    Player = Player.TrimEnd(';');
    return Player;
}

public string[][][] convertToArray(string ents)
{
    string[] p = new string[2];
    string[][] playerOneEnts = new string[maxEnts][];
    string[][] playerTwoEnts = new string[maxEnts][];
    string[][][] allEnts = new string[2][][];

    p = ents.Split('&');

    try
    {
        playerOneEnts = p[0].Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries).Select(chunk => chunk.Split(',')).ToArray();
        playerTwoEnts = p[1].Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries).Select(chunk => chunk.Split(',')).ToArray();

        MessageBox.Show(playerOneEnts.Length.ToString());

        Array.Copy(playerOneEnts, allEnts[0], playerOneEnts.Length);
        Array.Copy(playerTwoEnts, allEnts[1], playerTwoEnts.Length);
    }
    catch
    {
        MessageBox.Show("unable to convert string", "Fatal Error");
    }

    return allEnts;
}
Run Code Online (Sandbox Code Playgroud)

代码看起来像一场灾难给我,如果有人知道这个转换为字符串我很乐意为任何想法更好的方式.摆脱我的错误已经足够帮助我了.

谢谢!

M. *_*uga 5

以下是使用Linq的示例(需要.Net 4.0):

var source = "1,2,3;4,5,6&1,2,3;4,5,6";

string[][][] decoded = source.Split('&').Select(x => x.Split(';').Select(y => y.Split(',').ToArray()).ToArray()).ToArray();

string reencoded = String.Join("&", decoded.Select(x => String.Join(";", x.Select(y => String.Join(",", y)))));
Run Code Online (Sandbox Code Playgroud)

或者,IEnumarable泛型可用于避免转换为数组.

警告:此代码不验证输入,例如数组长度.

编辑: .NET 3.5的重编码器:

var reencoded = String.Join("&", decoded.Select(x => String.Join(";", x.Select(y => String.Join(",", y)).ToArray())).ToArray());
Run Code Online (Sandbox Code Playgroud)