首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给定网格中的位置,它是什么行和列?

给定网格中的位置,它是什么行和列?
EN

Stack Overflow用户
提问于 2013-11-01 16:09:45
回答 4查看 3.9K关注 0票数 3

我有一个申请,我正在写的地方,我必须把街道地址的标签页,是预先定义的。此标签工作表有3列10行。我有正确创建标签的循环,但需要允许用户选择工作表上要开始的标签。我本以为这将是一个简单的数学矩阵方程,但我无法想出或找到一个解决办法。

下面是一个示例:

代码语言:javascript
复制
1   2  3  4  5
6   7  8  9 10
11 12 13 14 15 

考虑到上面的矩阵,假设用户决定从#6开始,我需要告诉我的循环从那个位置开始: col:1行:2。

如果有帮助的话,我的循环看起来是这样的,但我认为这可以归结为一个我没有想过的数学方程:

代码语言:javascript
复制
for (var yCounter = 0; yCounter < _labelSettings.LabelPerColumn; yCounter++)
{
    for (var xCounter = 0; xCounter < _labelSettings.ColumnsPerPage; xCounter++)
    {       
        foreach (var table in customNugget.PdfTables)
        {
            table.YPosition = SheetSettings.PageHeight -
                              (verticalOffset + yCounter * ((verticalSize + verticalOffset)));

            table.XPosition = horizontalOffset + xCounter * ((horizontalSize + horizontalOffset));
        }
    }
}

编辑

代码语言:javascript
复制
     private static int _cellsPerRow = 3;
    private static int _startIndex;

    static void Main(string[] args)
    {

        string userInput = Console.ReadLine();
        _startIndex = int.Parse(userInput);

        int startY = _startIndex / _cellsPerRow;
        int startX = (_startIndex - 1) % _cellsPerRow;

        Console.WriteLine(string.Format("The index you chose lives in the following matrix location:\n Row: {0} Column: {1}", startY, startX));
        Console.WriteLine("Press any key to continue...");
        Console.Read();

    }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-01 16:12:30

假设您知道每一行中的单元格数(我认为应该是_labelSettings.ColumnsPerPage),则可以计算开始值,如下所示:

代码语言:javascript
复制
int cells = 5;//number of cells per row
int startAt = 6;//cell number to start at

int startY = (startAt - 1) / cells;//1
int startX = (startAt - 1) % cells;//0

然后,您可以使用这些开始值来初始化您的循环,但是您需要小心,以确保您的内部循环在第一次运行时只使用计算的开始值。要做到这一点,您可以在第一次执行y循环之后重新设置startX。就像这样:

代码语言:javascript
复制
for (var yCounter = startY; yCounter < _labelSettings.LabelPerColumn; yCounter++)
{
    for (var xCounter = startX; xCounter < _labelSettings.ColumnsPerPage; xCounter++)
    {
        //do stuff
    }
    startX = 0;//reset so that the next execution starts at the beginning of the row
}

这是逻辑的证明,尽管它在javascript中。

编辑:startY的计算被修改为正确处理,从最后一个数字开始是一行(感谢@Zach指出错误)

票数 4
EN

Stack Overflow用户

发布于 2013-11-01 16:12:48

代码语言:javascript
复制
x = num % grid width

y = num / grid width

num是从%开始的数字,是模数运算符(除以后的余数)网格宽度是网格宽度:)

票数 1
EN

Stack Overflow用户

发布于 2013-11-01 16:44:03

这适用于基于1的值,如您在问题中所示:

代码语言:javascript
复制
int _cellsPerRow = 5; //number of cells per row
for (int startAt = 1; startAt <= 15; startAt++)
{
    int startY = (startAt - 1) / _cellsPerRow + 1;
    int startX = (startAt - 1) % _cellsPerRow + 1;
    Console.WriteLine("{0}: {1}, {2}", startAt, startX, startY);
}

(例如,"6: 1,2")

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19730675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档