一维数组如何合并成二维数组,除了循环赋值有无其他方法?[C#]
需要转换成规则多维数组,即double[,],而非double[][]。
PS,要不要这么刺激!站长亲自回答这种小儿科的题目!
上代码:
var array1 = new int[] { 1, 2, 3}; var array2 = new int[] { 4, 5, 6 }; var array3 = new int[][] { array1, array2 };
需要转换成规则多维数组,即double[,],而非double[][]。
PS,要不要这么刺激!站长亲自回答这种小儿科的题目!
@TranSteel: 继续上代码,这次用Buffer.BlockCopy:
class Program { static void Main(string[] args) { var array1 = new double[] { 1.1, 2.2, 3.3 }; var array2 = new double[] { 4.4, 5.5, 6.6 }; var arrayList = new List<double[]>(); arrayList.Add(array1); arrayList.Add(array2); var mdArray = ToMultidimensionalArray(arrayList); Console.WriteLine("[{0},{1}]", mdArray.Rank, mdArray.Length / mdArray.Rank); for (int i = 0; i < mdArray.Rank; i++) { for (int j = 0; j < mdArray.Length / mdArray.Rank; j++) { Console.WriteLine(mdArray[i, j]); } } Console.ReadKey(); } static double[,] ToMultidimensionalArray(List<double[]> arrayList) { double[,] mdArray = new double[arrayList.Count, arrayList[0].Length]; int rowIndex = 0; arrayList.ForEach(x => { Buffer.BlockCopy( x, // src 0, // srcOffset mdArray, // dst rowIndex++ * mdArray.GetLength(1) * sizeof(double), // dstOffset x.Length * sizeof(double)); // count }); return mdArray; } }
运行结果:
@dudu: 好复杂。拜谢站长。
@dudu: 站长,这个换成string类型就不好用了,是怎么回事?