对来自不同来源的实体的排序列表进行分页

时间:2014-07-01 14:38:25

标签: algorithm list api sorting pagination

我的问题是,我有两个列表,为了简单起见,有4-4个项目,这些不是唯一的项目。按计算值排序的项目,让我们称之为排名。现在,我必须从8个项目中每页显示2个项目,但只有按排名排序的唯一值。

所以我有两个列表:

列出A

A - 1
B - 2
D - 5
C - 6

列表B

A - 2
D - 3
B - 4
C - 5

所以,我需要按排名排序的第一页项目,偏移0限制2,那将是:

第一页

A(list A) - 1
B(list A) - 2 // we skip the A from list B because we need unique values

所以第二页应该是:

预计第二页

D(list B) - 3
C(list B) - 5

但实际的第二页,因为偏移(跳过每个列表中的前两项),将导致:

实际第2页

B(list B) - 4
D(list A) - 5 // or C - 5 from list B

值会重复(B),这显然很糟糕。

现在我能想到的唯一解决方案是将所有列表合并到一个有序列表中并在该列表中应用分页,但这是我无法做到的。我通过API访问这些列表,甚至它是一个内部API我必须将其视为第三方API,无法更改。 API仅接受排序方向(asc,desc),偏移和限制参数。

我应该实时显示这些值,如果列表中有更改,我必须显示这些更改。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我有一个想法。请查看它。

假设: 两个列表都有相同的条目。

以下是解决问题的示例代码:

node * H_A = List_A.head
node * H_B = List_B.head

while ((H_A == NULL) || (H_B == NULL))
{
    // Here I am maintaining an invariant that value pointed by H_B is
    // greater than the value pointed by H_A.
    if (H_B > H_A)
    {
        swap (H_B, H_A);
    }

    Display value of H_A on the current page. This is the first value of the page.

    Move H_A to next value.

    if (value.H_B > value.H_A)
    {
        Display value of H_A on the current page. This is the second value of the page.
    }
    else
    {
        Display value of H_B on the current page. This is the second value of the page.
    }

    Move H_A to next value.
    Move H_B by two values.
    Move to next page. This page is completed.
}

如果不能解决您的问题,请告诉我。我们将继续努力。