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