从多个1D高效创建矩形2D阵列

时间:2013-07-14 17:46:19

标签: c# .net

除了循环。是否有一种从多个1D阵列实例化2D阵列的有效方法。

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

我也尝试了System.Buffer.BlockCopy,但是块拷贝会将单个1D数组滚动到多个列中,这不是我想要的。

我想要转换的简单示例:

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

2 个答案:

答案 0 :(得分:0)

使用unsafe代码和指针循环将是C#可以提供的禁食方法。使用unsafe因为它消除了在当前JIT中无法消除的边界检查。

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

答案 1 :(得分: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]}
            };