【需求】
现有一个需求,3行4列的从左到右从上到下的数组,转成4行3列,如图所示:
【实现方法】
通过C#编码实现,两种方法:
第一种方法:
public double[] transpose(double[] src, int w, int h) { double[] dst = null; if (src == null || src.Length != w * h || w == 0 || h == 0) { return dst; } dst = new double[w * h]; for (int yy = 0; yy < h; yy++) { for (int xx = 0; xx < w; xx++) { dst[xx * h + yy] = src[yy * w + xx]; } } return dst; }
第二种方法,通过指针实现:
public double[] transpose2(double[] src, int w, int h) { double[] dst = null; if (src == null || src.Length != w * h || w == 0 || h == 0) { return dst; } dst = new double[w * h]; unsafe { fixed (double* srcInptr = src) { double* psrc = srcInptr; fixed (double* dstInptr = dst) { for (int yy = 0; yy < h; yy++) { double* pdst = dstInptr + yy; for (int xx = 0; xx < w; xx++, ++psrc, pdst += h) { *pdst = *psrc; } } } } } return dst; }
【实现效果】
输入数组{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12},输出转置后的数组{1,5,9,2,6,10,3,7,11,4,8,12}
标签:src,转置,double,dst,xx,yy,C#,int,数组 From: https://www.cnblogs.com/moon-stars/p/18382664