从2D数组中删除倒数引用

时间:2011-08-04 00:32:14

标签: arrays algorithm language-agnostic multidimensional-array

我有一个2D数组,例如:

[
    [0, 1], // collisionGroup0's references
    [0, 1, 2], // collisionGroup1's references
    [0, 1], // collisionGroup2's references
];

此数组定义了我的游戏引擎的碰撞图。所以想象我有3个碰撞组。从这个数组中,我可以告诉以下内容:

collisionGroup0与collisionGroup0和collisionGroup1冲突。

collisionGroup1与collisionGroup0,collisionGroup1和collisionGroup2碰撞。

collisionGroup2与collisionGroup0和collisionGroup1冲突。

我希望这是有道理的。

好的,问题是:

我正在寻找一种循环并删除互惠引用的方法。由于collisionGroup0与collisionGroup1冲突,而collisionGroup1与collisionGroup0冲突,我们只需要一个引用。否则,当我进行实际的碰撞检查时,我们(我的引擎中发生了什么)碰撞加倍。

我希望最终的数组在处理后看起来像这样:

[
    [0, 1], // collisionGroup0's references
    [2], // collisionGroup1's references
    [0, 1], // collisionGroup2's references
];

我现在看起来像这样:

for (var row : int = 0; row < array.length; ++row)
{
    for (var column : int = 0; column < array[row].length; ++column)
    {
        for (var row2 : int = row + 1; row2 < array.length; ++row2)
        {
            for (var column2 : int = array[row2].length - 1; column2 >= 0; --column2)
            {
                if (array[row][column] == array[row2][column2])
                    array[row2].splice(column2, 1);
            }
        }
    }
}

但这让我想到了这个:

[
    [0, 1], // collisionGroup0's references
    [2], // collisionGroup1's references
    [], // collisionGroup2's references
];

因为它没有考虑到collisionGroup2与collisionGroup0不相互的事实。

我缺少什么想法?

谢谢!

1 个答案:

答案 0 :(得分:3)

消除碰撞目标索引大于当前索引的任何碰撞。所以,例如,摆脱下面的**家伙

[
[0, **1**], // collisionGroup0's references
[0, 1, **2**], // collisionGroup1's references
[0, 1], // collisionGroup2's references
];

因为1&gt; 0和2&gt; 1。 你可以做相反的事情 - 但如果它们是有序的,就像在例子中一样,这样你最终会截断数组,这可能比切断它们更快更容易。

我假设互惠参考在那里总是。如果没有,这是没用的!