如何使用一个框的数量获取网格上某个位置的坐标?
1 2 3 4 5 6
------------------------------
1| 1 2 3 4 5 6
2| 7 8 9 10 11 12
3| 13 14 15 16 17 18
4| 19 20 21 22 23 24
5| 25 26 27 28 29 30
6| 31 32 33 34 35 36
即如果我的数字是15,坐标是x = 3; y = 3
我尝试开发一个功能,但它没有用,有人有想法吗?
感谢您的帮助
答案 0 :(得分:2)
更新(公式错误):
y = (myNumber - 1) / 6 + 1;
x = (myNumber - 1) % 6 + 1;
更新(说明):
每行包含6个元素。我们在除以6时将x定义为余数:
x~myNumber%6
并添加+1,因为定义范围是[1; 6]。
x~myNumber%6 + 1
但是行中的最后一个元素可以被6整除,没有余数。为了考虑这一点,我们在应用模运算符之前从myNumber中减去1:
x =(myNumber - 1)%6 + 1
e.g。 myNumber = 1 => x = 1; myNumber = 6 => x = 6; myNumber = 7 => x = 1; myNumber = 12 => x = 6;
行数称为y,与整数除法成比例为6:
y~myNumber / 6
但我们还要考虑到我们不是从0开始,而是从1开始:
y~myNumber / 6 + 1
再次出现'左移',因为每行的最后一个元素可以除以6而没有余数。所以我们在除以之前从myNumber中减去1来反映这一点:
y =(myNumber - 1)/ 6 + 1
答案 1 :(得分:2)
您可以使用锯齿状数组:
private static readonly int[][] matrix = new int[6][];
// ...
matrix[0] = new int[] { 1, 2, 3, 4, 5, 6 };
matrix[1] = new int[] { 7, 8, 9, 10, 11, 12 };
matrix[2] = new int[] { 13, 14, 15, 16, 17, 18 };
matrix[3] = new int[] { 19, 20, 21, 22, 23, 24 };
matrix[4] = new int[] { 25, 26, 27, 28, 29, 30 };
matrix[5] = new int[] { 31, 32, 33, 34, 35, 36 };
和Linq找到x和y值:
int num = 15;
var matches = matrix
.Select((yArr, index) => new { yArr, yPos = index + 1 })
.Where(y => y.yArr.Contains(num))
.Select(y => new
{
X = (y.yArr.Select((x, i) => new { x, i })
.First(x => x.x == num).i) + 1,
Y = y.yPos,
});
if(matches.Any())
{
var firstMatch = matches.First();
int x = firstMatch.X;
int y = firstMatch.Y;
}