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

C#调用Array.Sort无法对销售等级数组排序问题求助

问题根因
  • 排序逻辑完全错误:你在遍历单个销售人员的循环内,每次都新建仅包含当前人员等级的单元素数组int[] salesLevel = { salesperson[i].level };,对单元素数组执行排序没有任何效果,也完全没有实现「所有销售人员按等级排序」的需求。
  • 数组下标使用不规范:你初始化了长度为8的Sales数组,却只使用下标1到6的位置,浪费存储空间的同时也容易触发索引越界问题。
  • 输出逻辑不符合需求:现有代码仅打印了每个人员的等级数字,没有按等级分组,也没有输出完整的销售人员字段信息。
修正方案

你需要直接对Sales类型的人员数组整体排序,再按等级分组输出即可,以下是可直接运行的完整代码:

public struct Sales
{
    public string name;
    public string ssn;
    public string district;
    public int articles;
    public int level;
}
static void Main(string[] args)
{
    // 初始化刚好容纳6个销售人员的数组
    Sales[] salesperson = new Sales[6];
    for (int i = 0; i < salesperson.Length; i++)
    {
        salesperson[i] = new Sales();
        Console.WriteLine("Salesperson {0}", i + 1);
        Console.Write("Name: ");
        salesperson[i].name = Console.ReadLine();
        Console.Write("Social Security Number (SSN): ");
        salesperson[i].ssn = Console.ReadLine();
        Console.Write("District: ");
        salesperson[i].district = Console.ReadLine();
        Console.Write("Number of Sold Articles: ");
        salesperson[i].articles = Convert.ToInt32(Console.ReadLine());
        Console.Write("\n");

        // 等级计算逻辑补全异常输入校验
        if (salesperson[i].articles < 50 && salesperson[i].articles >=1)
        {
            salesperson[i].level = 1;
        }
        else if (salesperson[i].articles >= 50 && salesperson[i].articles < 100)
        {
            salesperson[i].level = 2;
        }
        else if (salesperson[i].articles >=100 && salesperson[i].articles < 200)
        {
            salesperson[i].level = 3;
        }
        else if (salesperson[i].articles >= 200)
        {
            salesperson[i].level = 4;
        }
        else
        {
            Console.WriteLine("Error, invalid amount of articles.");
            // 异常输入默认标记等级为0排在最前
            salesperson[i].level = 0;
        }
    }

    // 对整个销售人员数组按等级排序,传入自定义比较规则
    Array.Sort(salesperson, (a, b) => a.level.CompareTo(b.level));

    // 按等级分组输出,匹配要求的展示格式
    int currentLevel = -1;
    foreach (var sale in salesperson)
    {
        if (sale.level != currentLevel)
        {
            currentLevel = sale.level;
            Console.WriteLine($"Level {currentLevel}: ");
            Console.WriteLine();
        }
        Console.WriteLine($"Name: {sale.name}");
        Console.WriteLine($"District: {sale.district}");
        Console.WriteLine($"SSN: {sale.ssn}");
        Console.WriteLine($"Sold articles: {sale.articles}");
        Console.WriteLine();
    }
}
效果说明

运行后会先录入6个销售人员的信息,之后自动按等级从1到4排序分组输出,完全匹配你要求的展示格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:24:04