如果在List中存入的是单个变量,用List.Sort便可以执行升序,用List.Reverse执行降序操作;
以下List<int>为例:
List<int> lis = new List<int>();
lis.Add(5);
lis.Add(3);
lis.Add(1);
lis.Add(7);
lis.Add(8);
lis.Sort();
foreach(int number in lis)
{
Console.Write(number);
}
Console.WriteLine();
lis.Reverse();
foreach (int number in lis)
{
Console.Write(number);
}
但是抽象一个用户的类,类里面有用户名,密码等信息存入List中,用以上方法进行排序或者降序显然是做不到的:
public class people
{
private string username;
public string Username
{
get { return username; }
set { username = value; }
}
private string userpass;
public string Userpass
{
get { return userpass; }
set { userpass = value; }
}
public people(string name, string pass)
{
this.username = name;
this.userpass = pass;
}
}
class Program
{
static void Main(string[] args)
{
List<people> list = new List<people>();
list.Add(new people("李小华", "423456"));
list.Add(new people("黄小强", "223456"));
list.Add(new people("张大虎", "323456"));
list.Sort();
foreach (people number in list)
{
Console.Write(number);
}
}
按照以上方法进行排序,执行编译后,编译器显示为:
那么如何将这个类进行排序呢?
首先想实现排序,必须以这个类中的一个属性为标准(让此属性前后两个值相互比较),那么就用到了匿名函数方法,将以上 list.Sort(); 改为:
list.Sort
(
delegate(people x, people y)
{
return x.Userpass.CompareTo(y.Userpass); //升序
});
foreach (people number in list)
{
Console.WriteLine(number.Username + " " + number.Userpass);
}
通过匿名方法实现了这个类的密码属性两两之间相互比较进而实现List中存放People这个类的升序。
还有一种用Lambda(=>或者=<)方法
list.Sort
(
(x, y) =>
{
return -x.Userpass.CompareTo(y.Userpass); //倒序
});
foreach (people number in list)
{
Console.WriteLine(number.Username + " " + number.Userpass);
}
还有一种排序是通过接口实现的:
class People : IComparable<People>
{
private int _id;
private string _name;
public People(int id, string name)
{
this._id = id;
this.Name = name;
}
public int Id
{
get
{
return _id;
}
set
{
_id = value;
}
}
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
//重写ToString
public override string ToString()
{
return "ID:" + _id + " Name:" + _name;
}
public int CompareTo(People other)
{
return this.Name.CompareTo(other.Name);
}
}
class Program
{
static void Main(string[] args)
{
List<People> list = new List<People>();
Random r = new Random();
//添加数据
for (int i = 0; i < 10; i++)
{
int j = r.Next(0, 10);
list.Add(new People(j, "name" + j));
}
Console.WriteLine("排序前:");
foreach (var p in list)
{
Console.WriteLine(p);
}
list.Sort();//排序
Console.WriteLine("排序后:");
foreach (var p in list)
{
Console.WriteLine(p);
}
}
}
简单介绍List的排序,希望对大家有帮助!