我真的不确定如何正确解释这一点,但让我试试。我有一个 C++ 程序正在侦听 CAN 总线(车辆通信总线)上的数据。每隔 1 秒,我就会从总线上收到一条新消息,其中包含有关错误消息的诊断信息。消息不是固定长度的,所以消息一次可能包含5个故障,下一次可能包含3个故障。消息来自两个(或多个)不同的来源,每个来源每 1 秒发送一次。在我的 UI 中,我需要以每 5 秒 1 次的速度循环显示活动故障列表。
这是我的问题。如何有效地使用最新信息更新列表?添加到列表中没有问题,但是如何删除不应再出现在列表中的项目?换句话说,如果我在消息中只收到 3 个错误,这意味着其中 2 个不再存在。我唯一能想到的是使用时间戳和一堆 for 循环来比较 2 条消息并添加/删除/更新列表。对于这类事情,是否已经存在更有效的东西?
编辑:为了澄清,我需要从列表中删除项目,因为这些故障不再有效。如果我有一个数组如下:
// Message that is received: (psudo code)
Fault newFaults1[5] { Fault1, Fault2, Fault3, Fault4, Fault5 };
Fault newFaults2[7] { Fault1, Fault2, Fault3, Fault4, Fault5, Fault6, Fault7 };
// Populate the array that holds both array values
for (int i = 0; i < newFaults1.Count(); i++)
Faults[i] = newFaults1[i];
for (int i = 0; i < newFaults2.Count(); i++)
Faults[i + newFaults1.Count()] = newFaults2[i];
// Now, the next time a message is received, there are fewer faults.
Fault newFaults1[2] { Fault1, Fault2 };
Fault newFaults2[1] { Fault1 };
// TODO: How do I remove all of the old items in the Faults array?