C#如何仅对工龄为3年的Teacher按salary降序排序且其余元素保持原位
实现思路
- 第一步:筛选出原集合中所有
year == 3的Teacher对象,按salary降序排序后存入临时队列,保证按顺序取用排序后的结果 - 第二步:遍历原集合的每个索引位置,若当前位置的教师工作年限不为3则直接保留;若为3则取出临时队列的队首元素填充到当前位置,即可保证非目标对象的位置完全不变,仅调整工作年限为3的教师顺序
完整实现代码
using System.Linq; using System.Collections.Generic; using System; class Teacher { public int id { get; set; } public string name { get; set; } public int year { get; set; } public double salary { get; set; } public Teacher() { } public Teacher(int id, string name, int year, double salary) { this.id = id; this.name = name; this.year = year; this.salary = salary; } } class Program { static void Main(string[] args) { List<Teacher> teachers = new List<Teacher>(); teachers.Add(new Teacher(1, "Teacher A", 4, 2000)); teachers.Add(new Teacher(2, "Teacher B", 3, 3000)); teachers.Add(new Teacher(3, "Teacher C", 5, 5000)); teachers.Add(new Teacher(4, "Teacher D", 3, 4000)); teachers.Add(new Teacher(5, "Teacher E", 3, 7000)); // 筛选year=3的教师按salary降序排序,转为队列方便按顺序取 var sortedYear3 = new Queue<Teacher>(teachers.Where(t => t.year == 3).OrderByDescending(t => t.salary)); // 遍历原集合替换year=3的位置 for (int i = 0; i < teachers.Count; i++) { if (teachers[i].year == 3) { teachers[i] = sortedYear3.Dequeue(); } } // 输出验证 foreach (var t in teachers) { Console.WriteLine($"{t.id}, {t.name}, {t.year}, {t.salary}"); } } }
运行输出结果
1, Teacher A, 4, 2000 5, Teacher E, 3, 7000 3, Teacher C, 5, 5000 4, Teacher D, 3, 4000 2, Teacher B, 3, 3000
内容的提问来源于stack exchange,提问作者Đức Long
相关产品推荐
相关产品推荐

