You need to enable JavaScript to run this app. C#中能否依据关联整数列表排序结果同步排序对应字符串列表?
优惠活动
大模型
产品
解决方案
定价
更多

C#中能否依据关联整数列表排序结果同步排序对应字符串列表?

C# 平行关联列表的同步排序实现

该功能完全可以实现,核心思路是基于两个列表的同索引绑定关系,先建立配对排序逻辑,再同步输出调整后的两个列表结果,以下是两种生产环境常用的实现方式:

方案一:LINQ 配对排序(语法最简洁)

该方法通过Zip方法将两个列表同索引的元素配对为关联对象,按照List_1的排序规则完成对象排序后,再拆分回独立列表。
示例代码:

// 初始化测试列表
List<int> List_1 = new List<int> {3, 1, 2};
List<string> List_2 = new List<string> {"eg1", "eg2", "eg3"};

// 配对元素并按List_1的值升序排序
var sortedPairList = List_1.Zip(List_2, (number, text) => new { SortKey = number, LinkedText = text })
                           .OrderBy(pair => pair.SortKey)
                           .ToList();

// 拆分得到排序后的两个独立列表
List<int> sortedList1 = sortedPairList.Select(p => p.SortKey).ToList();
List<string> sortedList2 = sortedPairList.Select(p => p.LinkedText).ToList();

代码执行后得到的sortedList1为{1, 2, 3},sortedList2为{"eg2", "eg3", "eg1"},完全匹配需求。

方案二:索引映射排序(无LINQ依赖场景可用)

如果项目不支持LINQ语法,可通过生成索引映射的方式实现:先生成原始位置的索引序列,基于对应位置List_1的值对索引排序,再按照排好的索引顺序依次取两个列表的元素。
示例代码:

// 生成覆盖所有元素位置的索引序列 [0,1,2]
int[] indexArray = Enumerable.Range(0, List_1.Count).ToArray();

// 按对应位置List_1的值对索引排序,得到排序后的索引序列 [1,2,0]
Array.Sort(indexArray, (a, b) => List_1[a].CompareTo(List_1[b]));

// 按索引顺序重新组装两个列表
List<int> sortedList1 = indexArray.Select(i => List_1[i]).ToList();
List<string> sortedList2 = indexArray.Select(i => List_2[i]).ToList();

该方案的执行结果与方案一完全一致。

实用注意事项

  • 实现前需提前校验两个列表的长度一致,否则会因元素配对错位导致结果异常
  • 长期维护的业务场景下,更推荐将关联元素封装为统一的实体类(例如包含SortKey、LinkedText两个属性的自定义类),直接对实体列表排序,从设计层面避免平行索引错位的风险

内容的提问来源于stack exchange,提问作者Jonah-H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 12:36:03