C#中如何对二维数组按首元素、次元素优先级依次排序?
C# 二维数组多优先级升序排序实现方案
问题原因
你当前使用的代码仅比较了每个子数组的第一个元素,当第一个元素相等时没有次级比较逻辑,排序器会认为两个子数组优先级相同,不会调整顺序,因此无法满足「第一个元素相等时按第二个元素升序排列,以此类推」的需求。
实现代码
固定长度为2的子数组版本
如果你的业务场景中所有子数组长度固定为2,可以直接使用两层比较逻辑:
Comparer<int> comparer = Comparer<int>.Default; Array.Sort<int[]>(properties, (x, y) => { // 优先比较第一个元素 int firstCompareRes = comparer.Compare(x[0], y[0]); if (firstCompareRes != 0) { return firstCompareRes; } // 第一个元素相等时比较第二个元素 return comparer.Compare(x[1], y[1]); });
任意长度子数组通用版本
如果需要支持任意长度的子数组,按索引顺序依次比较所有元素,可使用循环遍历的通用实现:
Comparer<int> comparer = Comparer<int>.Default; Array.Sort<int[]>(properties, (x, y) => { int minLen = Math.Min(x.Length, y.Length); // 按索引顺序逐位比较 for (int i = 0; i < minLen; i++) { int compareRes = comparer.Compare(x[i], y[i]); if (compareRes != 0) { return compareRes; } } // 所有共同索引位元素都相等时,短数组排在前面 // 若需要视为相等可直接返回0 return x.Length.CompareTo(y.Length); });
逻辑说明
上述代码完全符合你的排序规则:从子数组的第一个元素开始按升序比较,当前位元素相等时自动进入下一位的比较,直到出现不相等的元素确定排序优先级。
内容的提问来源于stack exchange,提问作者Mohibur_Cou
相关产品推荐
相关产品推荐

