代码之家  ›  专栏  ›  技术社区  ›  Burt

将多维数组转换为字符串并返回

  •  3
  • Burt  · 技术社区  · 14 年前

    我有一个二维数组,我需要能够转换成字符串表示和返回数组格式。我想创建一个generici方法,将处理任何数组1d,2d,3d等,所以我可以在将来重用该方法。

    string[,] _array = new string[_helpTextItemNames.Count, 2];
    
    3 回复  |  直到 14 年前
        1
  •  2
  •   Chris Taylor    14 年前

    SoapFormatter 是一种选择。这是一个快速而肮脏的例子。不漂亮,但可能对你有用。

    public static class Helpers
    {    
      public static string ObjectToString(Array ar)
      {      
        using (MemoryStream ms = new MemoryStream())
        {
          SoapFormatter formatter = new SoapFormatter();
          formatter.Serialize(ms, ar);
          return Encoding.UTF8.GetString(ms.ToArray());
        }
      }
    
      public static object ObjectFromString(string s)
      {
        using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(s)))
        {
          SoapFormatter formatter = new SoapFormatter();
          return formatter.Deserialize(ms) as Array;
        }
      }
    
      public static T ObjectFromString<T>(string s)
      {
        return (T)Helpers.ObjectFromString(s);
      }
    }
    

    Serializable 对象,只要数组的元素是可序列化的。

      // Serialize a 1 dimensional array to a string format
      char[] ar = { '1', '2', '3' };
      Console.WriteLine(Helpers.ObjectToString(ar));
    
      // Serialize a 2 dimensional array to a string format
      char[,] ar2 = {{ '1', '2', '3' },{ 'a', 'b', 'c' }};
      Console.WriteLine(Helpers.ObjectToString(ar2));
    
      // Deserialize an array from the string format
      char[,] ar3 = Helpers.ObjectFromString(Helpers.ObjectToString(ar2)) as char[,];
      char[,] ar4 = Helpers.ObjectFromString<char[,]>(Helpers.ObjectToString(ar2));
    
        2
  •  1
  •   Tergiver    14 年前

    Array.GetValue Array.SetValue StringFromArray ,我要走了 ArrayFromString 作为一个练习(与之相反的是一点语法分析)。请注意,下面的代码仅适用于矩形阵列。如果您想支持锯齿状数组,这是完全不同的,但至少要简单得多。通过检查可以判断数组是否锯齿状 array.GetType() 对于 Array

    这里使用的格式很简单: [num dimensions]:[length dimension#1]:[length dimension#2]:[…]:[[string length]:字符串值][[string length]:字符串值][…]

    static string StringFromArray(Array array)
    {
        int rank = array.Rank;
        int[] lengths = new int[rank];
        StringBuilder sb = new StringBuilder();
        sb.Append(array.Rank.ToString());
        sb.Append(':');
        for (int dimension = 0; dimension < rank; dimension++)
        {
            if (array.GetLowerBound(dimension) != 0)
                throw new NotSupportedException("Only zero-indexed arrays are supported.");
            int length = array.GetLength(dimension);
            lengths[dimension] = length;
            sb.Append(length);
            sb.Append(':');
        }
    
        int[] indices = new int[rank];
        bool notDone = true;
        NextRank:
        while (notDone)
        {
            notDone = false;
    
            string valueString = (array.GetValue(indices) ?? String.Empty).ToString();
            sb.Append(valueString.Length);
            sb.Append(':');
            sb.Append(valueString);
    
            for (int j = rank - 1; j > -1; j--)
            {
                if (indices[j] < (lengths[j] - 1))
                {
                    indices[j]++;
                    if (j < (rank - 1))
                    {
                        for (int m = j + 1; m < rank; m++)
                            indices[m] = 0;
                    }
                    notDone = true;
                    goto NextRank;
                }
            }
    
        }
        return sb.ToString();
    }
    
        3
  •  1
  •   Zippy    10 年前

    我知道,你有一个二维数组[n列x n行]。你想把它转换成字符串,然后你想把这个字符串转换成二维数组。我有一个想法如下:

        //The first method is convert matrix to string
         private void Matrix_to_String()
                {
                    String myStr = "";
                    Int numRow, numCol;//number of rows and columns of the Matrix
                    for (int i = 0; i < numRow; i++)
                    {
                        for (int j = 0; j < numCol; j++)
                        {
        //In case you want display this string on a textbox in a form 
        //a b c d . . . .
        //e f g h . . . .
        //i j k l . . . .
        //m n o p . . . .
        //. . . . . . . . 
    
                           textbox.Text = textbox.Text + " " + Matrix[i,j];
                            if ((j == numCol-1) && (i != numRow-1))
                            {
                                textbox.Text = textbox.Text + Environment.NewLine;
                            }
                        }
    
                    }
        myStr = textbox.text;
        myStr = myStr.Replace(" ", String.Empty);
        myStr = myStr.Replace(Environment.NewLine,String.Empty);
                }
    
    //and the second method convert string back into 2d array
    
        private void String_to_Matrix()
                {
                    int currentPosition = 0;
                    Int numRow, numCol;//number of rows and columns of the Matrix
                    string Str2 = textbox.Text;
    
                    Str2 = Str2 .Replace(" ", string.Empty);
                    Str2 = Str2 .Replace(Environment.NewLine, string.Empty);
    
                    for (int k = 0; k < numRow && currentPosition < Str2 .Length; k++)
                    {
                        for (int l = 0; l < numCol && currentPosition < Str2 .Length; l++)
                        {
                            char chr = Str2 [currentPosition];
    
                                Matrix[k, l] = chr ;                       
    
                            currentPosition++;
                        }
                    }  
    
                }
    

    希望这对你有帮助!