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

C# 如何使用LINQ填充自定义类型列表中X属性连续缺失的空白项

LINQ 实现方案

你可以通过构建X值的快速查找集合,配合连续整数序列生成直接得到结果,无需额外排序、遍历补插逻辑:

// 处理空列表的边界情况
if (!ListOfCustomTypes.Any())
{
    // 可按需调整空列表返回逻辑
    return new List<CustomType>();
}

// 构建X到Y的查找字典(如果X可能重复,可替换为ToLookup)
var xToYMap = ListOfCustomTypes.ToDictionary(c => c.X, c => c.Y);
int minX = ListOfCustomTypes.Min(c => c.X);
int maxX = ListOfCustomTypes.Max(c => c.X);

// 直接生成补全后的有序列表
var filledResult = Enumerable.Range(minX, maxX - minX + 1)
    .Select(x => new CustomType
    {
        X = x,
        Y = xToYMap.TryGetValue(x, out var existY) ? existY : 0
    })
    .ToList();

说明

  • 该写法完全基于原生LINQ实现,逻辑简洁直观
  • 时间复杂度为O(n),相比原实现先排序的O(nlogn)有更好的性能表现,数据量越大优势越明显
  • 无需额外的合并、排序操作,生成的结果直接就是X值升序的目标列表

如果你的业务场景中X可能存在重复,把ToDictionary替换为ToLookup即可,对应取值逻辑调整为:

var xToYMap = ListOfCustomTypes.ToLookup(c => c.X, c => c.Y);
// Select中的Y赋值改为
Y = xToYMap[x].FirstOrDefault()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:57:01