You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用LINQ将对象列表拆分为连续元素组成的子列表?

基于LINQ的连续序列拆分实现

你可以通过GroupBy方法非常简洁地实现需求,核心逻辑是给每一段连续序列分配同一个分组标识,遇到断开的情况就更新分组标识,实现代码如下:

List<Item[]> GetContiguousSequences(Item[] items)
{
    int groupId = 0;
    int? lastStop = null;
    return items
        .GroupBy(item => 
        {
            // 遇到不连续的情况就进入新分组
            if (lastStop.HasValue && item.Start != lastStop.Value)
                groupId++;
            lastStop = item.Stop;
            return groupId;
        })
        .Select(group => group.ToArray())
        .ToList();
}

实现说明

  • 用闭包变量groupId记录当前分组的编号,lastStop存储上一个元素的Stop值用来判断连续性
  • 遍历每个元素时如果当前元素的Start和上一个的Stop不匹配,就将分组编号加1,进入新的连续序列分组
  • 最终将每个分组的元素转为数组,再封装为List返回,完全符合要求的输出格式
    这个版本没有冗余的下标维护、切片计算逻辑,规则直接体现在分组判断中,可读性远高于原始的循环实现,用示例输入测试可以得到完全符合预期的输出。

内容的提问来源于stack exchange,提问作者Mr. Boy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:54:03