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
相关产品推荐
相关产品推荐

