【问题标题】:c# Copying jagged arrays to stringsc# 将锯齿状数组复制到字符串
【发布时间】:2016-01-30 13:23:39
【问题描述】:

我的函数应该用 "&" ";" 分割一个字符串和 "," 并返回一个三重锯齿状数组,反之亦然。 (来自类似数据:1,2,3;4,5,6&1,2,3;4,5,6)

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

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

完整代码:

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;
}

代码对我来说就像一场灾难,如果有人知道将其转换为字符串的更好方法,我会很高兴有任何想法。摆脱我的错误已经对我有足够的帮助了。

谢谢!

【问题讨论】:

    标签: c# arrays jagged-arrays


    【解决方案1】:

    这是使用 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)))));
    

    另外,可以使用 IEnumarable 泛型来避免转换为数组。

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

    编辑:为 .NET 3.5 重新编码:

    var reencoded = String.Join("&", decoded.Select(x => String.Join(";", x.Select(y => String.Join(",", y)).ToArray())).ToArray());
    

    【讨论】:

      【解决方案2】:

      您可以使用这样的嵌套 for 循环来做到这一点:

      string p = "1,2,3;4,5,6&1,5,3;4,5,9";
      List<List<List<string>>> result = new List<List<List<string>>>();
      foreach (var a in p.Split('&'))
      {
          List<List<string>> level2 = new List<List<string>>();
          foreach (var b in a.Split(';'))
          {
              level2.Add(new List<string>(b.Split(',')));
          }
          result.Add(level2);
      }
      var x = result[0][1][2]; // This will result in '6'.
      

      编码类似:

      string encoded;
      List<string> dec1 = new List<string>();
      foreach (var a in result)
      {
          string e = "";
          List<string> z = new List<string>();
          foreach (var b in a)
          {
              z.Add(String.Join(",", b));
          }
          e = String.Join(";", z);
          dec1.Add(e);
      }
      encoded = String.Join("&", dec1);
      

      【讨论】:

        猜你喜欢
        • 2021-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-18
        相关资源
        最近更新 更多