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

基于频次数组升序排序数组,频次相同时按元素自身升序同步排序

解决同步排序并处理计数相同场景的方案

我完全get到你的需求啦——要让numsFoundedSorted和numsFoundedCount像Array.Sort那样同步排序,核心规则是先按numsFoundedCount的值从小到大排序,当两个元素的计数相同时,numsFoundedSorted里的对应元素要按自身数值从小到大排列。

下面以C#为例给你具体的实现方案,思路是先把两个数组的对应元素绑定在一起,排序后再拆分回原数组结构,操作起来直观又可靠:

步骤1:将数值与对应计数配对

我们可以用元组(也可以自定义类)把每个数值和它的计数关联起来,这样排序时就能保证两者始终同步:

// 假设这是你的原始数组
int[] numsFoundedSorted = {5, 2, 3, 2, 5};
int[] numsFoundedCount = {2, 2, 1, 2, 2};

// 将数值和计数一一配对成元组列表
var pairedItems = numsFoundedSorted.Zip(numsFoundedCount, (num, count) => (Number: num, Count: count)).ToList();

步骤2:自定义排序规则

对配对后的列表设置排序优先级:

  • 第一优先级:按Count从小到大排序
  • 第二优先级:当Count相同时,按Number从小到大排序
pairedItems.Sort((itemA, itemB) => {
    // 先比较计数大小
    int countCompareResult = itemA.Count.CompareTo(itemB.Count);
    // 如果计数相同,再比较数值本身
    if (countCompareResult == 0)
    {
        return itemA.Number.CompareTo(itemB.Number);
    }
    return countCompareResult;
});

步骤3:拆分回原数组结构

把排序后的元组列表重新拆分成两个独立数组,就完成了同步排序:

numsFoundedSorted = pairedItems.Select(item => item.Number).ToArray();
numsFoundedCount = pairedItems.Select(item => item.Count).ToArray();

效果验证

比如你提到的示例场景,排序后numsFoundedSorted会严格遵循“先按计数升序,计数相同则按数值升序”的规则,完全符合你的预期。

如果你更习惯用Array.Sort的自定义比较器模式,也可以通过封装包含两个数组的比较器实现,但用元组配对的方式代码更简洁,逻辑也更容易理解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:29:38