2

除了循环。是否有一种有效的方法可以从多个 1D 数组中实例化 2D 数组。

我的一维数组必须在我的二维矩形数组中表现为列向量。所以第 0 列 = 第一个一维数组,第 1 列 = 第二个一维数组,等等...

我也尝试过System.Buffer.BlockCopy,但是块复制会将单个一维数组滚动到多个列中,这不是我想要的。

我想如何转换的简单示例:

var c1 = new int[] {1, 2, 3, 4};
var c2 = new int[] {5, 6, 7, 8};
var result = new int[,]
            {{1,5},
             {2,6},
             {3,7},
             {4,8}};
4

2 回答 2

0

使用代码和指针循环unsafe将是 C# 可以提供的快速方法。使用unsafe是因为它消除了在这种情况下无法消除的边界检查 b 当前的 JIT。

写入时按内存顺序依次循环遍历二维数组。这意味着您需要逐行而不是逐列编写。这个技巧优化了内存访问,并允许您只增加写指针而不是每次都计算地址(y*width+y)。

于 2013-07-14T19:23:33.077 回答
0

除了循环这将做(因为你没有指定这也是一个没有解决方案):

            var c1 = new int[] { 1, 2, 3, 4 };
            var c2 = new int[] { 5, 6, 7, 8 };
            var c3 = new int[,]
            {
                {c1[0],c2[0]},
                {c1[1],c2[1]},
                {c1[2],c2[2]},
                {c1[3],c2[3]}
            };
于 2013-07-14T21:41:01.250 回答