首页 新闻 会员 周边 捐助

一维数组如何合并成二维数组,除了循环赋值有无其他方法?[C#]

0
悬赏园豆:5 [已解决问题] 解决于 2015-06-06 12:29

一维数组如何合并成二维数组,除了循环赋值有无其他方法?[C#]

问题补充:

需要转换成规则多维数组,即double[,],而非double[][]。

 

PS,要不要这么刺激!站长亲自回答这种小儿科的题目!

TranSteel的主页 TranSteel | 初学一级 | 园豆:194
提问于:2015-06-06 10:43
< >
分享
最佳答案
0

上代码:

var array1 = new int[] { 1, 2, 3};
var array2 = new int[] { 4, 5, 6 };
var array3 = new int[][] { array1, array2 };
收获园豆:5
dudu | 高人七级 |园豆:30948 | 2015-06-06 10:57

需要转换成规则多维数组,即double[,],而非double[][]。

 

PS,要不要这么刺激!站长亲自回答这种小儿科的题目!

TranSteel | 园豆:194 (初学一级) | 2015-06-06 11:04

@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 | 园豆:30948 (高人七级) | 2015-06-06 12:26

@dudu: 好复杂。拜谢站长。

TranSteel | 园豆:194 (初学一级) | 2015-06-06 12:29

@dudu: 站长,这个换成string类型就不好用了,是怎么回事?

office编程 | 园豆:200 (初学一级) | 2019-06-26 13:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册