假设我有以下数据:
时间状态
10:00 On
11:00 Off
12:00 Off
13:00 Off
14:00 Off
15:00 On
16:00 On
我如何使用Linq将其分组
[开,[10:00]],[关,[11:00,12:00,13:00,14:00]],[开,[15:00,16:00]]
Ani*_*Ani 12
创建一个GroupAdjacent扩展名,例如此处列出的扩展名.
然后就像这样简单:
var groups = myData.GroupAdjacent(data => data.OnOffStatus);
Run Code Online (Sandbox Code Playgroud)
您也可以使用一个Linq查询使用变量来跟踪更改,如下所示.
int key = 0;
var query = data.Select(
(n,i) => i == 0 ?
new { Value = n, Key = key } :
new
{
Value = n,
Key = n.OnOffFlag == data[i - 1].OnOffFlag ? key : ++key
})
.GroupBy(a => a.Key, a => a.Value);
Run Code Online (Sandbox Code Playgroud)
基本上,它为每个项目分配一个键,当当前项目不等于前一项目时,该项目会增加.当然,这假设您的数据位于List或Array中,否则您必须尝试不同的方法
| 归档时间: |
|
| 查看次数: |
2892 次 |
| 最近记录: |