根据时间戳过滤具有间歇性连续重复值的列表

问题描述 投票:0回答:1

我需要值在 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 循环,但我正在寻找更有效的解决方案。

c# linq
1个回答
0
投票

我的解决方案假设列表按时间戳升序排列。如果不先按时间戳对列表进行排序。

为了快速测试,制作了一个元组列表:

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.
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.