大家看见这个标题的时候,肯定以为我在侮辱你的智商。遍历数组谁不会?
只是此处的遍历略有不同:在基于反射的程序中,遍历多维数组 的每个元素,并且得知是访问了哪个下标下的元素。
写完以后,还是觉得我的方法笨拙了点,希望大虾们能告诉我更好的办法。
废话少说,先贴代码:
public static void ShowArray(Array item)
{
int nRank = item.Rank;
int i, j;
int[,] des = new int[nRank, 2];
int[] loc = new int[nRank];
for (i=0; i<nRank; i++)
{
des[i,0] = item.GetLowerBound(i);
des[i,1] = item.GetUpperBound(i);
loc[i] = des[i,0];
}
string strTemp;
while (loc[0]<=des[0,1])
{
strTemp = "item(";
for (i=0; i<nRank-1; i++)
{
strTemp += loc[i] + ",";
}
strTemp += loc[i] + ")=" + item.GetValue(loc).ToString();
Console.WriteLine(strTemp);
loc[i]++;
for (j=nRank-1; j>0; j--)
{
if (loc[j]>des[j,1])
{
loc[j] = des[j,0];
loc[j-1]++;
}
}
}
}
以下是测试代码:
int[,,] arr = new int[,,]
{
{
{1,2},
{3,4},
{5,6}
},
{
{7,8},
{9,10},
{11,12}
}
};
ShowArray(arr);
以下是运行结果:
item(0,0,0)=1
item(0,0,1)=2
item(0,1,0)=3
item(0,1,1)=4
item(0,2,0)=5
item(0,2,1)=6
item(1,0,0)=7
item(1,0,1)=8
item(1,1,0)=9
item(1,1,1)=10
item(1,2,0)=11
item(1,2,1)=12
只是此处的遍历略有不同:在基于反射的程序中,遍历多维数组 的每个元素,并且得知是访问了哪个下标下的元素。
写完以后,还是觉得我的方法笨拙了点,希望大虾们能告诉我更好的办法。
废话少说,先贴代码:
public static void ShowArray(Array item)
{
int nRank = item.Rank;
int i, j;
int[,] des = new int[nRank, 2];
int[] loc = new int[nRank];
for (i=0; i<nRank; i++)
{
des[i,0] = item.GetLowerBound(i);
des[i,1] = item.GetUpperBound(i);
loc[i] = des[i,0];
}
string strTemp;
while (loc[0]<=des[0,1])
{
strTemp = "item(";
for (i=0; i<nRank-1; i++)
{
strTemp += loc[i] + ",";
}
strTemp += loc[i] + ")=" + item.GetValue(loc).ToString();
Console.WriteLine(strTemp);
loc[i]++;
for (j=nRank-1; j>0; j--)
{
if (loc[j]>des[j,1])
{
loc[j] = des[j,0];
loc[j-1]++;
}
}
}
}
以下是测试代码:
int[,,] arr = new int[,,]
{
{
{1,2},
{3,4},
{5,6}
},
{
{7,8},
{9,10},
{11,12}
}
};
ShowArray(arr);
以下是运行结果:
item(0,0,0)=1
item(0,0,1)=2
item(0,1,0)=3
item(0,1,1)=4
item(0,2,0)=5
item(0,2,1)=6
item(1,0,0)=7
item(1,0,1)=8
item(1,1,0)=9
item(1,1,1)=10
item(1,2,0)=11
item(1,2,1)=12