数据合约+多维数组——任何解决方案
本文关键字:数组 任何 解决方案 数据 | 更新日期: 2023-09-27 18:12:45
From MSDN:
组合集合类型(具有集合的集合)是允许的。锯齿数组被视为集合的集合。不支持多维数组
那么,如果你不能正常地序列化一个多维数组,如何有效地解决这个问题呢?我的想法是有一个属性,使数组变平,序列化该集合,并在反序列化期间不使其变平,但我不确定这是否有效?
有人找到解决这个问题的方法吗?
我应该注意到,我认为扁平化可能有效的原因是因为我的维度是固定值(它们是硬编码的)。
是的,您可以将其平放或锯齿化,这是更方便的方法。
任何时候,在二维数组中,您都要花费O(n)个努力(或输入中的每个项目一个"处理"单元)。就像你说的,在二维和一维之间转换并不是很麻烦。除非您正在处理非常大的容量(web服务的调用频率的数组大小),或者在高度受限的系统上(.Net Compact或.Net Micro Frameworks),我怀疑这真的是个大问题。排序之类的事情才会变得昂贵。
string[,] input = new string[5, 3];
string[] output = new string[15];
for (int i = 0; i < input.GetUpperBound(0); i++)
{
for (int j = 0; j < input.GetUpperBound(1); j++)
{
output[j * input.GetUpperBound(j) + i] = input[i, j];
}
}
可以使用扩展方法:
public static string[][] Jaggedize(this string[,] input) {
string[][] output = new string[input.GetLength(0)][];
for (int i = 0; i < input.GetLength(0); i++) {
output[i] = new string[input.GetLength(1)];
for (int j = 0; j < input.GetLength(1); j++) {
output[i][j] = input[i, j];
}
}
return output;
}