C#对List的元素按属性排序

C#对List元素排序有几种方法。

方法一、使用Linq

List<User> sortedList = list.OrderBy(o=>o.ID).ToList();

如果按降序排序,可以使用OrderByDescending方法:

List<User> sortedList = list.OrderByDescending(o=>o.ID).ToList();

方法二、扩展IComparable接口

示例:

public class User : IComparable<User>
{
public string ID;
public string Name;
public int CompareTo(User other)
{
if (null == other)
return 1;
return string.Compare(this.Id, other.Id);
}
}

定义好类后,使用List排序如下:

List<User> myList = ...
myList.Sort();

如果是除了按Id排序,还有按其他属性排序的需求,可以实现IComparer接口:

public sealed class UserByNameComparer : IComparer<User> 
{
public int Compare(User x, User y)
{
if (object.ReferenceEquals(x, y))
return 0;
else if (null == x)
return -1;
else if (null == y)
return 1;
else
return string.Compare(x.Name, y.Name);
}
}

使用:

List<User> myList = ...
myList.Sort(new UserByNameComparer());


版权声明:著作权归作者所有。

相关推荐

C#给文档注释添加换行

错误用法:使用<br />/// 第一行 /// <br /> /// 第二行 显示出来没有效果。正确做法:使用<para>/// <summary> /// <para>第一行</para> /// <para>第二行</par

C#对DataTable做LINQ查询

我们是不能直接对DataTable做LINQ查询,DataRowCollection是没有实现IEnumerable<T>。有一些方法可以间接实现对DataTable执行LINQ查询。AsEnumerable()使用DataTable的扩展AsEnumerable(),把DataTable转换为IEnumerable<DataRow>。var results&nb

C#计算用户年龄

此方法仅用于简单计算年龄,不适用于计算虚岁public static int GetAge(DateTime birthDate) {     DateTime now = DateTime.Now;      int age&n

Python 3按指定的元素分割列表

Python 3有多种方法可以用来分割列表。示例有以下列表li = ['a','b','c','.','aa','bb','cc','.','aaa','bbb','ccc'] 现需要按“.”分割列表。使用itertools.groupby>>>li = ['a','b','c','.','aa','bb','cc','.','a

Python字典列表按字典的键值排序

列表list_to_be_sorted = [{'name':'Jack', 'age':39}, {'name':'Bob', 'age':10}] 对列表按name的值排序得到:list_to_be_sorted = [{'name':'Bob', 'age':39}, {'name':'Jack',&n