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

如何用Linq/MoreLinq将唯一元素列表转为索引字典?

用LINQ/MoreLINQ生成元素索引字典的解决方案

原生LINQ实现

原生LINQ提供了带索引参数的Select重载,可直接获取元素及其在序列中的位置,再通过ToDictionary转换为目标字典:

Dictionary<int, int> lookup = things
    .Select((item, index) => new { item.Id, index })
    .ToDictionary(entry => entry.Id, entry => entry.index);

由于题目明确列表中ID唯一,无需处理重复键异常,直接使用ToDictionary即可。

MoreLINQ实现

MoreLINQ的Enumerate方法会返回包含元素值和对应索引的结构,同样可以快速生成字典:

// 需要先引用MoreLINQ库
Dictionary<int, int> lookup = things
    .Enumerate()
    .ToDictionary(entry => entry.Value.Id, entry => entry.Index);

算法名称

这个建立元素到其位置映射的操作,通常被称为反向索引(Reverse Indexing)或位置映射(Position Mapping)。

额外说明

  • 很多人容易忽略LINQ中Select的带索引重载,它正是解决“获取元素序列索引”需求的关键。
  • 若存在重复ID的场景,可改用ToLookup先分组再处理,但本题中无需考虑该情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:45:16