C#对List中的数据排序的几种方法
文章目录前言一、Sort()方法二、对自定义类型进行排序1.继承接口IComparable<>2.通过委托方法进行排序3.通过匿名函数、Lambda表达式排序前言在C#中List<>是一个很好用的容器,采用泛型避免了ArrayList中经常出现的拆箱装箱,List<>中还提供了很多操作数据集合的方法。我们往往要对集合中的数据进行排序操作,下面简单介绍几种方法。一
前言
在C#中List<>是一个很好用的容器,采用泛型避免了ArrayList中经常出现的拆箱装箱,List<>中还提供了很多操作数据集合的方法。我们往往要对集合中的数据进行排序操作,下面简单介绍几种方法。
一、Sort()方法
直接使用成员方法Sort()只能对C#本身的几种类型进行排序,比如int,float,double等,不能对我们自定义的类型进行排序。
//申明一个List容器
List<int> list = new List<int>();
//向list中添加数据
list.Add(4);
list.Add(2);
list.Add(3);
//排序
list.Sort();
此时输出list将是升序排列后结果,即:2 3 4 。
二、对自定义类型进行排序
首先声明一个自定义类型
class Item
{
public int money;
public Item(int money)
{
this.money = money;
}
}
申明一个自定义类型的List
List<Item> itemList = new List<Item>();
itemList.Add(new Item(100));
itemList.Add(new Item(300));
itemList.Add(new Item(200));
这时候要是在Main中使用itemList.Sort()程序运行时会报错的,下面介绍几种解决方法实现对自定义类型的排序。
1.继承接口IComparable<>
进入int等可以用Sort()进行排序的几种类型查看定义会发现,它们都继承了接口IComparable<>,实现其中的CompareTo()方法从而实现排序,因此我们也可以套在自定义类型上。
代码如下:
class Item : IComparable<Item>
{
public int money;
public int CompareTo(Item other)
{
//返回值含义:
//小于0:放在传入对象的前面
//等于0:保持当前的位置不变
//大于0:放在传入对象的后面
if (this.money > other.money) return 1;
else return -1;
}
}
这样,调用itemList.Sort()就不会报错,并且排好序了。
注意,其实还有一个不带泛型的接口IComparable也可以实现,进去看过后会发现它的CompareTo()方法参数为object类型,就要多一步转换:
(other as Item).money
2.通过委托方法进行排序
进入到Sort()方法定义去看,其实是有四种重载的,其中有一种重载参数是一个返回值为int类型的委托类型,我们可以在外面声明一个用来排序的方法。
代码如下:
static int SortItem(Item item1,Item item2)
{
//传入的对象为列表中的对象
//进行两两比较,用左边的和右边的 按条件 比较
//返回值规则与接口方法相同
if (item1.money > item2.money) return 1;
else return -1;
}
将方法名作为参数传递,实现排序。
itemList.Sort(SortItem);
3.通过匿名函数、Lambda表达式排序
这种方法和第二种方法原理相同,熟悉委托的读者都知道,匿名函数和Lambda表达式可以说与委托的使用是相辅相成的,这里用一种较为简洁的方式实现排序方法:
itemList.Sort((item1, item2) => { return item1.money > item2.money ? 1 : -1; });
如此一来,一行代码就可实现对List容器中的自定义类型进行排序。
更多推荐
所有评论(0)