合并集合数组中的重叠集合

时间:2010-09-17 03:00:39

标签: php javascript arrays

我有一个数组,每个条目包含一堆集的最小值和最大值,如下所示:

Array
(

    [0] => Array
        (
            [0] => 1200
            [1] => 2400
        )

    [1] => Array
        (
            [0] => 1400
            [1] => 3800
        )

    [2] => Array
        (
            [0] => 2700
            [1] => 4200
        )
    [3] => Array
        (
            [0] => 5900
            [1] => 6400
        )

)

对于每个索引,0索引是最小值,1索引是该特定集的最大值。我需要创建一个javascript或php函数来合并这个数组,以便重叠的集合变成一个。因此,上面的数组将变成以下内容:

Array
(

    [0] => Array
        (
            [0] => 1200
            [1] => 4200
        )
    [1] => Array
        (
            [0] => 5900
            [1] => 6400
        )

)

如您所见,从第一个数组中,0,1和2被合并到第二个数组的索引0中。来自第一个数组的索引3与任何其他集合都没有重叠,因此在第二个数组中变为索引1。

原始数组本身将包含大约70到80个集合,并且最小值和最大值可以高达9999999999,因此以n + 1,n + 2方式迭代数字行是不可行的。

有什么想法吗?

更新+解决方案

如下面的评论中所述,这确实是一个转贴(没有看到另一篇文章)。解决方案的链接位于以下链接:

Merging overlapping ranges in PHP arrays?

1 个答案:

答案 0 :(得分:0)

假设集合按下限排序,如示例所示,这样的事情怎么样?

var newIndex = 0;
var newSetArray[newIndex][0] = setArray[0][0];
for (i = 1; i < setArray.length; i++) {
    if (setArray[i-1][1] < setArray[i][0]) {
        newSetArray[newIndex][1] = setArray[i-1][1];
        newSetArray[++newIndex][0] = setArray[i][0];
    }
}
newSetArray[newIndex][1] = setArray[setArray.length-1][1];

语法可能需要一些调整,但我认为这应该有用。