同步两个点数组
本文关键字:两个 数组 同步 | 更新日期: 2023-09-27 18:33:23
我有两个格式为 {Time,Y Value} 的点数组,例如:
A - [{1,1} {2, 2} {3, 3} {5, 5}]
B - [{1,1} {4, 4} {5, 5}]
我需要两个数组具有相同的时间离散化。 因此,对于 A 中时间为 t 的每个点,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}]
有没有人对如何为大型数组执行此操作有任何想法?
如果您知道最大数组大小并且时间始终是 1 的倍数,如您的示例所示,您可以使用两个可为空的数组int
s ( int?
),其中所有值都以 null 开头,然后根据加载初始数组的方式将它们设置为整数值。 然后,您不必做任何丑陋的事情,例如搜索不同长度的列表,每次需要插入值时增加列表等 - 这一切都由数组索引完成。 如果需要更紧凑形式的列表,则可以快速浏览数组并将所有非空项作为坐标对添加到列表中,如您所显示的那样。
我想如果你不知道最大时间值,你可以使用List<int?>
而不是int?[]
;你只需要确保每个时间值都被表示(这意味着每个时间值都有一个null
不在列表中)。 关键是能够从时间值映射到列表索引,因此不涉及搜索。
假设 A
和 B
的伪代码按时间排序:
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++