C#List的排序和自定义类的排序

一、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,不改变位置

可以使用数轴来记忆。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

睡不着乌托托

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值