欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > C# List排序 List.Sort();

C# List排序 List.Sort();

2025/9/21 2:57:42 来源:https://blog.csdn.net/m0_53393728/article/details/141575535  浏览:    关键词:C# List排序 List.Sort();

委托 lambda表达式 类继承接口 

class Program{public static void Main(){List<Test > tests = new List<Test>();tests.Add(new Test (1));tests.Add(new Test (4));tests.Add(new Test (2));tests.Add(new Test (3));tests.Add(new Test (5));//用委托tests.Sort( delegate (Test a, Test b) {if (a.Id > b.Id){return -1;}else if (a.Id < b.Id){ return 1; }return 0;});for (int i = 0; i < tests.Count; i++){Console.WriteLine(tests[i].Id);}Console.WriteLine("-----------------------------------------");// 用lambda表达式tests.Clear();tests.Add(new Test(1));tests.Add(new Test(4));tests.Add(new Test(2));tests.Add(new Test(3));tests.Add(new Test(5));tests .Sort( (a, b)=>{ if(a.Id>b.Id)return 1;return -1;});//把if  else 写成三目运算符tests.Sort((a, b) => { return (a.Id > b.Id) ? 1 : -1; });for (int i = 0; i < tests.Count; i++) {Console.WriteLine(tests[i].Id);}Console.WriteLine("-----------------------------------------");//用类继承接口    实现好接口里的逻辑后就可以直接用啦tests.Clear();tests.Add(new Test(1));tests.Add(new Test(4));tests.Add(new Test(2));tests.Add(new Test(3));tests.Add(new Test(5));tests.Sort();for (int i = 0; i < tests.Count; i++){Console.WriteLine(tests[i].Id);}}}
class Test : IComparable<Test>
{public int Id { get; set; }public Test( int id){ Id = id;}public int CompareTo(Test other){                               // 返回正数(1) 放后面//返回负数(-1) 放前面if(this.Id>other.Id)        //返回0  不动return 1;               //如果我比他大 我就放他后面(返回1)else if(this.Id<other.Id)   //如果我比他小 我就放他前面(返回-1)return -1; return 0;                   //如果我们相等 就不动}                               //这样一来 就是升序排列了
}

根据不同词条排序

class Program
{public static void Main(){   Practice1 practice1 = new Practice1();practice1.MonsterSort();}}
class Practice1
{int positive = 1;int negative = -1;int a;List<Monster> list = new List<Monster>();public Practice1(){list.Add(new Monster(1, 3, 6));list.Add(new Monster(2, 4, 8));list.Add(new Monster(7, 7, 7));list.Add(new Monster(5, 6, 3));list.Add(new Monster(7, 9, 1));list.Add(new Monster(4, 5, 1));list.Add(new Monster(3, 3, 5));list.Add(new Monster(11, 3, 9));list.Add(new Monster(5, 11, 10));list.Add(new Monster(6, 10, 12));}public void MonsterSort(){while (true){Console.WriteLine("");Console.WriteLine("请输入数字进行排序");Console.WriteLine("1.攻击排序");Console.WriteLine("2.防御排序");Console.WriteLine("3.血量排序");Console.WriteLine("4.反转");a = int.Parse(Console.ReadLine());if (a == 4){positive = -positive;negative = -negative;}else {list.Sort(SortFun);}for (int i = 0; i < list.Count; i++){Console.WriteLine(list[i]);}}}public int SortFun(Monster c ,Monster b){switch (a){case 1:return (c.Atk > b.Atk ? positive  : negative);case 2:return (c.Def > b.Def ? positive : negative);case 3:return (c.Def > b.Def ? positive : negative);}return 0;}}class Monster 
{public int Atk { get; set; }public int Def { get; set; }public int Hp { get; set; }public Monster(int atk ,int def ,int hp){ Atk = atk; Def = def; Hp = hp;}public override string ToString(){return String.Format("怪物血量{0} 攻击力{1} 防御力{2}",Hp,Atk,Def);}}

根据不同词条的权重排序 
(类型>名字长度>品质)

class Program
{public static void Main(){   Practice1 practice2 = new Practice2();practice1.ObjectsSort();}}
namespace Advanced
{internal class practice2{List<Objects> practice=new List<Objects>();public practice2(){practice.Add(new Objects(Types.Weapon, "手枪", Value.C));practice.Add(new Objects(Types.Weapon, "散弹枪", Value.B));practice.Add(new Objects(Types.Weapon, "神威大炮", Value.A));practice.Add(new Objects(Types.Armor, "皮衣", Value.C));practice.Add(new Objects(Types.Jewelry, "碎骨项链", Value.F));practice.Add(new Objects(Types.Armor, "铁胸甲", Value.B));practice.Add(new Objects(Types.Weapon, "小步枪", Value.C));practice.Add(new Objects(Types.Jewelry, "麻痹戒指", Value.A));practice.Add(new Objects(Types.Armor, "铁鞋子", Value.B));practice.Add(new Objects(Types.Jewelry, "雷电手环", Value.A));practice.Add(new Objects(Types.Weapon, "大AK47", Value.A));}public void ObjectsSort(){practice.Sort((a, b) => {if (a.objectType > b.objectType)return -1;else if(a.objectType<b.objectType) return 1;else if (a.name.Length>b.name.Length)return -1;else if(a.name.Length < b.name.Length)return 1;else if(a.value<b.value)return -1;else return 1;});ShowList();}public void ShowList(){for (int i = 0; i < practice.Count; i++){Console.WriteLine("{0}  {1}  {2}", practice[i].objectType, practice[i].name, practice[i].value);}}}enum Types{Weapon,Armor,Jewelry,}enum Value{A, B, C, D, E, F,}class Objects{public  Types objectType;public  String name;public  Value value;public Objects(Types t,string n,Value v ) {objectType = t;name = n;value = v;}}
}

把字典键值对存List 里面根据键(或者值进行排序)

namespace Advanced
{internal class practice3{Dictionary<int, string> dir = new Dictionary<int, string>();List<KeyValuePair<int,string>> pairsList = new List<KeyValuePair<int,string>>();public practice3(){dir.Add(4, "abc");dir.Add(1, "bcd");dir.Add(2, "cde");dir.Add(3, "def");}public void DirectorySort(){foreach (KeyValuePair<int ,string> a in dir){pairsList.Add(a);}pairsList.Sort((a, b) => {if (a.Key < b.Key){return -1;}elsereturn 1;});foreach (KeyValuePair<int, string> a in pairsList){Console.WriteLine("{0}-{1}",a.Key,a.Value);}}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词