【问题标题】:Return integer index of 1D array for 2D array of coordinates pairs返回坐标对的二维数组的一维数组的整数索引
【发布时间】:2017-08-16 21:34:28
【问题描述】:

在阅读了 10 多个关于将整个数组从 2D 转换为 1D 以及反之亦然的线程之后,我想知道是否有一个数学公式,不需要迭代来返回一对的索引位置用于排序的二维数组的整数。

我的“网格”始终是正方形的,可以是任意大小(在本例中为 3x3),并且我有一个已排序的人类友好值块,我需要从中检索我所谓的“真正的 1D 索引” " 像这样:

"Human-friendly" coordinates| Java 2D Indices    |  True 1D indices
    [1,1],[1,2],[1,3],  ==>   [0,0],[0,1],[0,2], ==>  0 , 1 , 2
    [2,1],[2,2],[2,3],  ==>   [1,0],[1,1],[1,2], ==>  3 , 4 , 5
    [3,1],[3,2],[3,3],  ==>   [2,0],[2,1],[2,2], ==>  6 , 7 , 8

所以我需要一个方法为我的班级提供以下结果:

我输入 1,1 并返回 0, 我输入 3,2 并返回 7, 我输入 2,3 并返回 5, 等等等等……

我玩过六个方程式,我尝试将坐标添加到前一行索引的平方,但我永远无法为网格中的每个单元格获得正确的结果。我缺少一些特殊的运算符或数学函数吗?

谢谢。

【问题讨论】:

    标签: java arrays matrix


    【解决方案1】:

    如果索引被命名为 [index1,index2],

    1DIndex = (rowNumber*index1) + index2
    

    其中第一行的 rowNumber 从 1 开始,index1 和 index2 是 Java 索引。

    【讨论】:

    • 如果我输入 3,2 并想返回 7,在您的示例中会怎样?
    • 您的 java 索引比输入索引小 1。因此,您的方法首先将它们都减少 1 到 2,1。那么,2,1 在 3x3 矩阵的第三行,所以 3*2+1=7。
    • 所以你还需要知道网格的大小才能知道行号。
    • 对于第二行,当我输入 2,1 时,您的方法说我应该这样做:(2 * 1) + 0 ...这等于 '2',但位置 2,1 的数字实际上是“3”。
    【解决方案2】:

    让矩阵为 3*3 ,3 行和 3 列,我们必须找到 (i,j) 的索引,然后公式将是。 指数= 3*(i-1)+j;

    注意:- 这里的 3*3 和 i,j 不是 java 2d 数组格式,它是人类友好的坐标。

    示例 (i,j)=(2,3) 指数=3*(2-1)+3 =6 而且由于您的索引从 0 开始,您可以简单地从 6 中减去 1,即 5。

    【讨论】:

    • 我想你明白了。所以第一个常数是人类友好形式的总行数。在末尾和括号中减去一个与使用 java 行、列值基本相同。因此,当我测试 (N-rows* Java-row)+Java_column 时,我得到了所有 9 个单元格的正确答案。请问你是怎么知道的?这只是数组展平的常用公式吗?它有正确的名称吗?非常感谢。
    • 不,我只是尝试为数组的不同值单独构建不同的公式,最后想到了这个公式。我不知道这个公式是否有合适的名称。
    猜你喜欢
    • 2014-06-27
    • 2016-02-06
    • 2015-04-20
    • 2023-03-06
    • 2016-09-19
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多