/**
* 功能: 获取用一维数组表示的任意N维数组的定位
* @param argiDimensionValue
* @return void
* @since 创建日期:2022年9月14日,最后一次修改日期:2022年9月14日
* @author 李锋
*/
public int getPsition(int... dimensionValueArgi)
{
/*
三维数组 a[3][2][5] => 用一维数字 m_DataArray[3*2*5] 表示。
假设三维数组 a[3][2][5] 3行2列5面数组 用 a[x_max][y_max][z_max] 代替,
那么 x_max = 3, y_max = 2, z_max = 5,那么
数组 m_DimensionMax = {x_max,y_max,z_max}
即:
dimensionValueArgi[0] = x_max = 3
dimensionValueArgi[1] = y_max = 2
dimensionValueArgi[1] = z_max = 5
所有元素可以看作 三个数列相加,数列名为 a[0],a[1],a[2]
a[0] 总数 10个
a[1] 总数 10个
a[2] 总数 10个
例子:getFixedPsition(0,1,2) x,y,z
第一列第一个无素是: a[0][0][0] => (y+1) * (z+1) => m_DataArray[ (x * y_max * z_max) + (y+1) * (z+1) - 1] => m_DataArray[0]
第二列第一个元素是: a[1][0][0] => m_DataArray[ (x * y_max * z_max) + (y+1) * (z+1) - 1]
=> a[ ( 1 * 2 * 5) + (0+1) * (0+1) ] => m_DataArray[10];
第二列第二个元素是: a[1][1][0] => m_DataArray[ ( x * y_max * z_max) + (y+1) * (z+1) - 1]
=> a[ ( 1 * 2 * 5) + (1+1) * (0+1) - 1] => m_DataArray[11];
最后:
a[x][y][z] => m_DataArray[ (x * y_max * z_max) + (y+1) * (z+1) - 1]
=> m_DataArray[ (dimensionValueArgi[0] * y_max * z_max) + ( dimensionValueArgi[1] + 1) * (dimensionValueArgi[2] + 1) - 1]
*/
//时间问题,太晚了,这一版本暂时不进行异常处理
int i数列总数 = 1;
for(int i = 1; i < m_DimensionMax.length; ++i) {
i数列总数 *= m_DimensionMax[i];
}
int sum1 = dimensionValueArgi[0] * i数列总数;
int sum2 = 1;
for(int i = 1; i < dimensionValueArgi.length; ++i) {
sum2 *= (1 + dimensionValueArgi[i]);
}
return sum1 + sum2 - 1;
}
/**
* 功能: 获取用一维数组表示的任意N维数组的定位
* @param argiDimensionValue
* @return void
* @since 创建日期:2022年9月14日,最后一次修改日期:2022年9月14日
* @author 李锋
*/
public int getPsition(int... dimensionValueArgi)
{
/*
三维数组 a[3][2][5] => 用一维数字 m_DataArray[3*2*5] 表示。
假设三维数组 a[3][2][5] 3行2列5面数组 用 a[x_max][y_max][z_max] 代替,
那么 x_max = 3, y_max = 2, z_max = 5,那么
数组 m_DimensionMax = {x_max,y_max,z_max}
即:
dimensionValueArgi[0] = x_max = 3
dimensionValueArgi[1] = y_max = 2
dimensionValueArgi[1] = z_max = 5
所有元素可以看作 三个数列相加,数列名为 a[0],a[1],a[2]
a[0] 总数 10个
a[1] 总数 10个
a[2] 总数 10个
例子:getFixedPsition(0,1,2) x,y,z
第一列第一个无素是: a[0][0][0] => (y+1) * (z+1) => m_DataArray[ (x * y_max * z_max) + (y+1) * (z+1) - 1] => m_DataArray[0]
第二列第一个元素是: a[1][0][0] => m_DataArray[ (x * y_max * z_max) + (y+1) * (z+1) - 1]
=> a[ ( 1 * 2 * 5) + (0+1) * (0+1) ] => m_DataArray[10];
第二列第二个元素是: a[1][1][0] => m_DataArray[ ( x * y_max * z_max) + (y+1) * (z+1) - 1]
=> a[ ( 1 * 2 * 5) + (1+1) * (0+1) - 1] => m_DataArray[11];
最后:
a[x][y][z] => m_DataArray[ (x * y_max * z_max) + (y+1) * (z+1) - 1]
=> m_DataArray[ (dimensionValueArgi[0] * y_max * z_max) + ( dimensionValueArgi[1] + 1) * (dimensionValueArgi[2] + 1) - 1]
*/
//时间问题,太晚了,这一版本暂时不进行异常处理
int i数列总数 = 1;
for(int i = 1; i < m_DimensionMax.length; ++i) {
i数列总数 *= m_DimensionMax[i];
}
int sum1 = dimensionValueArgi[0] * i数列总数;
int sum2 = 1;
for(int i = 1; i < dimensionValueArgi.length; ++i) {
sum2 *= (1 + dimensionValueArgi[i]);
}
return sum1 + sum2 - 1;
}