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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:48:05