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

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

解决这个问题的最佳方式是什么?

string[,] _array = new string[_helpTextItemNames.Count, 2]; 

如果您不太关心字符串的结构,那么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(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(Helpers.ObjectToString(ar2)); 

如果你想要阻止你自己的格式,那么困难的部分就是走一个矩形数组,因为Array.GetValueArray.SetValue一个特定的forms。 这是StringFromArray ,我将把ArrayFromString作为一个练习(只需稍微解析就可以了)。 请注意,下面的代码仅适用于矩形arrays。 如果你想支持锯齿状arrays,那就完全不同了,但至少要简单得多。 您可以通过检查Array array.GetType()来判断数组是否是锯齿状的。 它也不支持下限为零以外的任何数组。 对于没有任何意义的C#,但它确实意味着它可能不能用作从其他语言使用的通用库。 这可以修复,但不值得入场IMO的价格。 [删除关于非零基数组的解释]

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

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

据我所知,你有一个2d数组[n cols xn rows]。 并且您希望将其转换为字符串,之后您想将此字符串转换回2d数组。 我的想法如下:

  //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 //abcd . . . . //efgh . . . . //ijkl . . . . //mnop . . . . //. . . . . . . . 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++; } } } 

希望这有帮助!