如何在C#中按指定ID顺序对ResultOutcome数组排序
按指定ID顺序重新排列ResultOutcome数组
核心思路
用字典构建ID到数组元素的快速映射,再按指定顺序遍历ID列表,直接从字典中取出对应元素生成有序数组,效率远高于常规排序方案。
实现代码
首先构建索引字典(将原数组的string类型ID转为int,匹配排序规则的类型):
var outcome = Result.ToArray(); int[] requiredOrder = new int[5] {3,5,2,1,4}; // 构建ID与ResultOutcome的映射字典 var outcomeDict = outcome.ToDictionary(item => int.Parse(item.id), item => item);
然后按照指定顺序生成新数组:
// 生成有序数组,自动过滤原数组中不存在的ID var orderedOutcomes = requiredOrder .Select(id => outcomeDict.TryGetValue(id, out var item) ? item : null) .Where(item => item != null) .ToArray();
细节说明
- 容错处理:如果不确定
requiredOrder中的ID都存在于原数组,用TryGetValue避免抛出KeyNotFoundException,并通过Where过滤无效项;若能确保ID全匹配,可简化为:var orderedOutcomes = requiredOrder.Select(id => outcomeDict[id]).ToArray(); - ID类型转换:原数组的ID是
string类型,需确保能正常转为int,否则要提前做格式校验(比如用int.TryParse捕获转换失败的情况)。 - 性能优势:字典查找时间复杂度为O(1),整体过程时间复杂度为O(n),比基于排序的O(n log n)方案更高效。
内容的提问来源于stack exchange,提问作者user14806829
相关产品推荐
相关产品推荐

