I have 2 arrays. I want to convert the index of the first array to the second. Is there a better way to do it than what I have below?
我有2个阵列。我想将第一个数组的索引转换为第二个数组。有没有比我下面更好的方法呢?
Array array1[9];
Array array2[3][3];
// Index is the index of the 1D array
public Point convert1Dto2D(int index)
{
Point p = new Point();
switch (index) {
case 0:
p.x = 0;
p.y = 0;
break;
case 1:
p.x = 0;
p.y = 1;
break;
case 2:
p.x = 0;
p.y = 2;
break;
case 3:
p.x = 1;
p.y = 0;
break;
case 4:
p.x = 1;
p.y = 1;
break;
case 5:
p.x = 1;
p.y = 2;
break;
case 6:
p.x = 2;
p.y = 0;
break;
case 7:
p.x = 2;
p.y = 1;
break;
case 8:
p.x = 2;
p.y = 2;
break;
}
return p;
}
3 个解决方案
#1
27
p.x = index / 3;
p.y = index % 3;
#2
6
You can do this mathematically using modulus and integer division, given your second array is a 3x3 array the following will do.
您可以使用模数和整数除法进行数学运算,假设您的第二个数组是3x3数组,以下将执行此操作。
p.y = index % 3;
p.x = index / 3;
#3
2
I assume your running that code in a loop? If so
我假设您在循环中运行该代码?如果是这样
IEnumerable<Point> DoStuff(int length, int step) {
for (int i = 0; i < length; i++)
yield return new Point(i/step, i%step);
}
Call it
叫它
foreach (var element in DoStuff(9, 3))
{
Console.WriteLine(element.X);
Console.WriteLine(element.Y);
}
#1
27
p.x = index / 3;
p.y = index % 3;
#2
6
You can do this mathematically using modulus and integer division, given your second array is a 3x3 array the following will do.
您可以使用模数和整数除法进行数学运算,假设您的第二个数组是3x3数组,以下将执行此操作。
p.y = index % 3;
p.x = index / 3;
#3
2
I assume your running that code in a loop? If so
我假设您在循环中运行该代码?如果是这样
IEnumerable<Point> DoStuff(int length, int step) {
for (int i = 0; i < length; i++)
yield return new Point(i/step, i%step);
}
Call it
叫它
foreach (var element in DoStuff(9, 3))
{
Console.WriteLine(element.X);
Console.WriteLine(element.Y);
}