同步两个点阵

时间:2016-02-04 15:21:59

标签: c# arrays

我有两个格式为{Time,Y Value}的点阵列,例如:

A - [{1,1} {2, 2} {3, 3} {5, 5}]

B - [{1,1} {4, 4} {5, 5}]

我需要两个阵列具有相同的时间离散化。因此对于时间t在A中的每个点,需要在B中具有相同时间的点,反之亦然。如果数组中不存在,则应添加一个新点,其Y值等于前一个点。

因此,在同步A和B之后,它们看起来应该是:

A - [{1,1} {2, 2} {3, 3} {4, 3} {5, 5}]

B - [{1,1} {2, 1} {3, 1} {4, 4} {5, 5}]

有没有人对如何为大型数组执行此操作有任何想法?

2 个答案:

答案 0 :(得分:0)

如果您知道最大数组大小,并且时间总是1的倍数,如示例所示,您可以使用两个可以为空int s {int?的大数组值从null开始,然后根据您加载初始数组将它们设置为整数值。然后你不必做任何丑陋的事情,比如搜索不同长度的列表,每次需要插入值时增加列表等等 - 它都是由数组索引完成的。如果您需要更紧凑形式的列表,则可以压缩数组并将所有非空项添加到列表中作为您已经显示的坐标对。

我想如果您不知道最长时间价值,可以使用List<int?>代替int?[];您只需要确保每次都表示值(意味着每个值不在列表中的null)。关键是能够从时间值映射到列表索引,因此不涉及搜索。

答案 1 :(得分:0)

假设AB的伪代码按时间排序:

Sync(A, B)
    def indA = 0
    def indB = 0
    while indA < length(A) and indB < length(B)
        if A[indA].time == B[indB].time
             indA++
             indB++
        else if A[indA].time < B[indB].time
             insert {time: B[indB].time, value: A[indA].value} to A at indA+1
             indA++
        else
             insert {time: A[indA].time, value: B[indB].value} to B after indB+1
             indB++