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

如何按List<int>对List<Type>排序?C# MVC场景实现

按指定列表顺序对C#集合排序的解决方案

这问题我之前做项目时也碰到过,刚好能用LINQ轻松实现,给你分享两个实用方案,按需选就行:

方案一:直接用OrderBy + IndexOf(简单快速)

这个方法最直观,利用SortValues.IndexOf(fruit.Id)获取每个水果Id在排序列表中的位置,再按这个位置排序:

var sortedFruits = FruitTypes.OrderBy(f => SortValues.IndexOf(f.Id)).ToList();

注意点:

  • 要求所有Fruit的Id都在SortValues里存在,如果某个Id不在SortValues中,IndexOf会返回-1,对应的项会排到最前面
  • 适合小数据量场景,因为IndexOf每次查询是O(n)时间复杂度

方案二:转字典优化性能(大数据量推荐)

如果你的Fruit列表或SortValues比较大,反复调用IndexOf会拖慢性能,这时可以先把SortValues转成Dictionary<int, int>,把Id和它的排序索引对应起来,查询效率直接拉到O(1):

// 先构建排序索引字典
var sortIndexDict = SortValues.Select((id, index) => new { id, index })
                              .ToDictionary(x => x.id, x => x.index);

// 按字典中的索引排序,同时灵活处理不存在的Id(示例中排到最后)
var sortedFruits = FruitTypes.OrderBy(f => sortIndexDict.TryGetValue(f.Id, out var index) 
                                          ? index 
                                          : int.MaxValue)
                             .ToList();

这个方案不仅性能更好,还能自定义处理不在SortValues里的项——要是想让这类项排到最前面,把int.MaxValue改成int.MinValue就行。

验证结果

按你的示例数据,两种方案排序后的结果都是:

  1. Pear(Id=5)
  2. Plum(Id=4)
  3. Orange(Id=3)
  4. Banana(Id=1)
  5. Apple(Id=2)

完全匹配SortValues的顺序~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:00:46