委托 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);}}}
}