一、List排序
List.Sort方法用于对列表中的元素进行排序,它可以根据元素的自然顺序或者自定义的比较器对列表进行升序或降序排序。
using System;
using System.Collections.Generic;
namespace Test
{
class Item : IComparable<Item>//自定义类的排序,继承了泛型接口用来排序
{
public int money;
public Item(int money)
{
this.money = money;
}
public int CompareTo(Item other)
{
//返回值的含义
if(this.money > other.money)
{
return 1;//放到传入值的右边
}
else if(this.money < other.money)
{
return -1;//放到传入值的左边
}
else
{
return 0;//不动
}
}
}
class ShopItem//通过委托函数进行排序
{
public int id;
public ShopItem(int id)
{
this.id = id;
}
}
class Program
{
public static void Main(string[] args)
{
//系统自带的排序
List<int> list = new List<int>();
list.Add(4);
list.Add(3);
list.Add(2);
list.Add(6);
list.Add(5);
list.Add(1);
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
list.Sort();
Console.WriteLine("-------------");
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
//自定义类的排序 继承了泛型接口用来排序
List<Item> itemList = new List<Item>();
itemList.Add(new Item(100));
itemList.Add(new Item(30));
itemList.Add(new Item(10));
itemList.Add(new Item(60));
itemList.Add(new Item(200));
itemList.Add(new Item(40));
itemList.Sort();
Console.WriteLine("-------------");
for (int i = 0; i < itemList.Count; i++)
{
Console.WriteLine(itemList[i].money);
}
//通过委托函数进行排序
List<ShopItem> shopItem = new List<ShopItem>();
shopItem.Add(new ShopItem(1004));
shopItem.Add(new ShopItem(1030));
shopItem.Add(new ShopItem(1001));
shopItem.Add(new ShopItem(1028));
shopItem.Add(new ShopItem(1025));
shopItem.Add(new ShopItem(1024));
shopItem.Sort((a,b)=>{return a.id>b.id?1:-1;});
Console.WriteLine("-------------");
for (int i = 0; i < shopItem.Count; i++)
{
Console.WriteLine(shopItem[i].id);
}
}
}
}
二、自定义类的排序
当我们将数据存储在列表中时,我们可能需要按照某个条件对它们进行排序。例如,我们可能希望按照价格、日期、姓名或任何其他标准对商品列表进行排序。这时就可以使用自定义的Sort()方法,使用接口或者委托实现想要的排序。
1.使用接口
自定义类的排序,需要继承了IComparable泛型接口用来排序
using System;
using System.Collections.Generic;
namespace Test
{
class Item : IComparable<Item>//自定义类的排序,继承了泛型接口用来排序
{
public int money;
public Item(int money)
{
this.money = money;
}
//继承接口的方法CompareTo
public int CompareTo(Item other)
{
//返回值(1,-1,0)的含义
if(this.money > other.money)
{
return 1;//放到传入值的右边
}
else if(this.money < other.money)
{
return -1;//放到传入值的左边
}
else
{
return 0;//不改变位置
}
}
}
class Program
{
public static void Main(string[] args)
{
//自定义类的排序 继承了泛型接口用来排序
List<Item> itemList = new List<Item>();
itemList.Add(new Item(100));
itemList.Add(new Item(30));
itemList.Add(new Item(10));
itemList.Add(new Item(60));
itemList.Add(new Item(200));
itemList.Add(new Item(40));
for (int i = 0; i < itemList.Count; i++)
{
Console.WriteLine(itemList[i].money);
}
itemList.Sort();
Console.WriteLine("-------------");
for (int i = 0; i < itemList.Count; i++)
{
Console.WriteLine(itemList[i].money);
}
Console.ReadKey();
}
}
}
2.使用委托lambda表达式
using System;
using System.Collections.Generic;
namespace Test
{
class ShopItem//通过委托函数进行排序
{
public int id;
public ShopItem(int id)
{
this.id = id;
}
}
class Program
{
public static void Main(string[] args)
{
//通过委托函数(lambda)进行排序
List<ShopItem> shopItem = new List<ShopItem>();
shopItem.Add(new ShopItem(1004));
shopItem.Add(new ShopItem(1030));
shopItem.Add(new ShopItem(1001));
shopItem.Add(new ShopItem(1028));
shopItem.Add(new ShopItem(1025));
shopItem.Add(new ShopItem(1024));
for (int i = 0; i < shopItem.Count; i++)
{
Console.WriteLine(shopItem[i].id);
}
shopItem.Sort((a,b)=>{return a.id>b.id?1:-1;});
Console.WriteLine("-------------");
for (int i = 0; i < shopItem.Count; i++)
{
Console.WriteLine(shopItem[i].id);
}
Console.ReadKey();
}
}
}
shopItem.Sort((a,b)=>{return a.id>b.id?1:-1;});
Sort内可以使用lambda表达式
(a,b)=>{return a.id>b.id?1:-1;}
参数a,参数b,返回 三目运算 如果a的id大于b的id,返回1,否则返回-1。
返回值(1,-1,0)的含义
1,放到传入值的右边
-1,放到传入值的左边
0,不改变位置
可以使用数轴来记忆。