【发布时间】:2021-12-11 22:04:21
【问题描述】:
问题已被编辑。参见 cmets。更改以斜体显示。
我有以下由 ID 标识的多个物理设备生成的有序(开始/停止)事件列表。为简单起见,仅显示一台设备的数据。
Date Hour ID Event IsStart
18/10/2021 10:35:22 1 DeviceConnected True
18/10/2021 10:20:10 1 DeviceConnected True
18/10/2021 10:12:20 1 DeviceConnected False
18/10/2021 10:12:19 1 DeviceConnected False
18/10/2021 08:24:14 1 DeviceConnected True
在给定的时间段内,通常是 24 小时,我不能有两次或多次连续的开始或停止。我需要删除“重复项”。
在上面的示例中,这意味着在使用 linq 应用过滤器之后:
Date Hour ID Event IsStart
18/10/2021 10:20:10 1 DeviceConnected True
18/10/2021 10:12:19 1 DeviceConnected False
18/10/2021 08:24:14 1 DeviceConnected True
开始后应该有一个停止或什么都没有,反之亦然。
这是一个典型的差距和岛屿问题,对吧?让我们将岛号添加到初始数据集中。除非我错了,否则我们应该以这样的方式结束:
Date Hour ID Event IsStart Island
18/10/2021 10:35:22 1 DeviceConnected True 3
18/10/2021 10:20:10 1 DeviceConnected True 3
18/10/2021 10:12:20 1 DeviceConnected False 2
18/10/2021 10:12:19 1 DeviceConnected False 2
18/10/2021 08:24:14 1 DeviceConnected True 1
我可以用 Linq 做到这一点吗?如果是这样,我应该只能保留岛上的第一条记录。
【问题讨论】:
标签: c# linq gaps-and-islands