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

C#中如何获取List2中未在List1首尾出现的连续缺失元素?

获取List2中开头/结尾连续缺失元素的最简方法

核心思路是:先定位List1对应元素在List2中的首尾位置,再截取List2中该位置之前的开头缺失部分,以及位置之后的结尾缺失部分,合并结果即可。

步骤与代码示例

假设Segment类可通过某个属性(比如Point)关联到List2中的Point元素,具体实现如下:

// 从List1中提取对应的Point序列(根据你的Segment结构调整属性名)
var list1Points = segments.Select(s => s.Point).ToList();

int startIndex = 0;
// 找到List2中第一个出现在list1Points里的元素索引
while (startIndex < points.Count && !list1Points.Contains(points[startIndex]))
{
    startIndex++;
}

int endIndex = points.Count - 1;
// 找到List2中最后一个出现在list1Points里的元素索引
while (endIndex >= 0 && !list1Points.Contains(points[endIndex]))
{
    endIndex--;
}

// 提取开头缺失的元素:List2从0到startIndex-1的部分
var missingStart = points.Take(startIndex).ToList();
// 提取结尾缺失的元素:List2从endIndex+1到末尾的部分
var missingEnd = points.Skip(endIndex + 1).ToList();

// 合并所有缺失的开头和结尾元素
var allMissing = missingStart.Concat(missingEnd).ToList();

优化说明

如果Point类型未正确重写Equals和GetHashCode,或者需要自定义匹配逻辑,可把list1Points.Contains(...)替换为自定义判断,比如:

!list1Points.Any(p => p.Id == points[startIndex].Id)

若List1为空,startIndex会走到points.Count,endIndex会走到-1,此时missingStart就是整个List2,missingEnd为空,符合预期。

内容的提问来源于stack exchange,提问作者Ziad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:32:47