C# 正在尝试使用C将int[]转换为int[,]#

C# 正在尝试使用C将int[]转换为int[,]#,c#,arrays,multidimensional-array,C#,Arrays,Multidimensional Array,我想要一个函数将一维数组int[480000]转换为大小为int[800600]的二维数组。 你能帮我怎么做吗?for(int i=0;i

我想要一个函数将一维数组int[480000]转换为大小为int[800600]的二维数组。 你能帮我怎么做吗?

for(int i=0;i<800;++i){
for (int i = 0; i < 800; ++i) {
    for (int j = 0; j < 600; ++j) {
        m[i, j] = a[600*i + j];
    }
}
对于(int j=0;j<600;++j){ m[i,j]=a[600*i+j]; } }
根据您的存储布局,您可能需要改用
i+800*j

公共静态T[,]转换(此T[]源,int行,int列)
public static T[,] Convert<T>(this T[] source, int rows, int columns)
{
  int i = 0;
  T[,] result = new T[rows, columns];

  for (int row = 0; row < rows; row++)
    for (int col = 0; col < columns; col++)
      result[row, col] = source[i++];
  return result;
}
{ int i=0; T[,]结果=新的T[行,列]; 对于(int row=0;row
UPD(固定按列而不是按行填充,这是正确的版本)

private static T[,]create2DimArray(T[]数组,int n)
{

如果(n您真的想实际移动数据,还是800x600“视图”就足够了?
您可以使用这样的包装器:

// error checking omitted
class MatrixWrapper<T>
{
    private T[] _data;
    private int _columns;

    public MatrixWrapper(T[] data, int rows, int columns)
    {
        _data = data;
        _columns = columns;
        // validate rows * columns == length
    }

    public T this[int r, int c]
    {
        get { return _data[Index(r, c)]; }
        set { _data[Index(r, c)] = value; }
    }

    private int Index(int r, int c)
    {
        return r * _columns + c;
    }
}
//省略错误检查
类矩阵包装器
{
私人T[]_数据;
专用int_列;
公共MatrixWrapper(T[]数据,int行,int列)
{
_数据=数据;
_列=列;
//验证行*列==长度
}
公共T这个[int r,int c]
{
获取{return_data[Index(r,c)];}
set{u data[Index(r,c)]=值;}
}
私有整数索引(整数r,整数c)
{
返回r*_列+c;
}
}
你使用它就像:

        double[] data = new double[4800];
        var wrapper = new MatrixWrapper<double>(data, 80, 60);
        wrapper[2, 2] = 2.0;
double[]数据=新的double[4800];
var wrapper=新的MatrixWrapper(数据,80,60);
包装器[2,2]=2.0;

1)
arr.Length
->
array.Length
.2)注意:它将逐列复制数组,而不是像您通常期望的那样逐行复制。对不起,是错误的。我更新了答案,我在维度大小和索引方面出错。在第二个参数中,我们传递了所需的列数,然后计算行数并填充新的二维数组。
        double[] data = new double[4800];
        var wrapper = new MatrixWrapper<double>(data, 80, 60);
        wrapper[2, 2] = 2.0;