list是封装好的一个类,本质上是可自动扩容的泛型数组。
List自带的排序。像int,short,long…都可以直接使用list.Sort()进行排序。
实例:
List<int> ints = new List<int>();
ints.Add(10);
ints.Add(2);
ints.Add(7);
ints.Add(5);
ints.Sort();
for(int i = 0; i < ints.Count; i++)
{
Console.WriteLine(ints[i]);
}
类自定义排序:
- 继承IComparable接口,并实现其中的升序或降序方法。
class Item:IComparable<Item>
{
public int money;
public Item(int money)
{
this.money = money;
}
public int CompareTo(Item other)
{
//返回值的含义
//小于0:放在传入对象的前面
//等于0:保持当前的位置不变
//大于0:放在传入对象的后面
//可以理解为传入对象的位置为0
if(this.money > other.money)
{
return 1;
}
else
{
return -1;
}
}
}
- List可以传入委托,委托变量存储实现sort排序的方法,这样,不用在排序class对象时再在每个class里继承接口,然后实现接口的方法。而是在想排序时,写一个sort排序方法,然后想排序就将sort排序方法用委托作为参数传入排序执行代码中。
static void Main(string[] args)
{
shopItems.Sort(SortShopItem);
for (int i = 0;i < shopItems.Count; i++)
{
Console.WriteLine(shopItems[i].id);
}
}
static int SortShopItem(ShopItem item,ShopItem item1)
{
if(item.id > item1.id) { return 1; }
else return -1;
}
- 另外一种方法:用匿名函数的方式
shopItems.Sort(delegate (ShopItem item, ShopItem item1)
{
if (item.id > item1.id) { return 1; }
else return -1;
});
- 另外一种方法:用Lambda表达式的方式
shopItems.Sort( (ShopItem item, ShopItem item1) =>
{
if (item.id > item1.id) { return 1; }
else return -1;
});
用Lambda表达式的方式,同时用三目运算符
shopItems.Sort((ShopItem item, ShopItem item1) => { return item.id > item1.id ? 1 : -1; });
用Lambda表达式,同时省去参数类型,同时用三目运算符,简洁的写法
shopItems.Sort((item, item1) => { return item.id > item1.id ? 1 : -1; });