我需要值在 1 和 0 之间交替。如果值重复,我需要过滤并保留具有最高时间戳的值。
时间戳 | 价值 |
---|---|
08:10 | 0 |
08:15 | 0 |
08:20 | 1 |
08:25 | 0 |
08:30 | 1 |
08:35 | 1 |
08:50 | 1 |
08:55 | 0 |
时间戳 | 价值 |
---|---|
08:15 | 0 |
08:20 | 1 |
08:25 | 0 |
08:50 | 1 |
08:55 | 0 |
我使用了 for 循环,但我正在寻找更有效的解决方案。
我的解决方案假设列表按时间戳升序排列。如果不先按时间戳对列表进行排序。
为了快速测试,制作了一个元组列表:
List<(TimeOnly timestamp, int value)> list = [
(new(08, 10), 0),
(new(08, 20), 0),
(new(08, 30), 1),
(new(08, 40), 1),
(new(08, 50), 1),
(new(08, 55), 0),
];
我的算法通过添加或更新元素来创建一个名为
filtered
的结果列表,具体取决于我们是否在 0/1 之间进行转换。
List<(TimeOnly timestamp, int value)> filtered = new();
filtered.Add(list[0]);
for (int i = 1; i < list.Count; i++) {
if (list[i].value == filtered[^1].value) {
filtered[^1] = list[i]; // Same value, update.
} else {
filtered.Add(list[i]); // Transition 0 -> 1 or 1 -> 0, add.
}
}