温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C#中有哪些List排序方法

发布时间:2021-06-23 15:10:02 来源:亿速云 阅读:282 作者:Leah 栏目:编程语言

今天就跟大家聊聊有关C#中有哪些List排序方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

ArrayList arrayList;

最重要的是:继承IComparer<T>接口,实现int IComparer<T>.Compare(T t1, T t2)方法。

代码如下:

/**//// <summary>  /// 继承IComparer<T>接口,实现同一自定义类型 对象比较  /// </summary>  /// <typeparam name="T">T为泛用类型</typeparam>  public class Reverser<T> : IComparer<T>  ...{  private Type type = null;  private ReverserInfo info;   /**//// <summary>  /// 构造函数  /// </summary>  /// <param name="type">进行比较的类类型</param>  /// <param name="name">进行比较对象的属性名称</param>  /// <param name="direction">比较方向(升序/降序)</param>  public Reverser(Type type, string name, ReverserInfo.Direction direction)  ...{  this.type = type;  this.info.name = name;  if (direction != ReverserInfo.Direction.ASC)  this.info.direction = direction;  }   /**//// <summary>  /// 构造函数  /// </summary>  /// <param name="className">进行比较的类名称</param>  /// <param name="name">进行比较对象的属性名称</param>  /// <param name="direction">比较方向(升序/降序)</param>  public Reverser(string className, string name, ReverserInfo.Direction direction) ...{  try ...{  this.type = Type.GetType(className, true);  this.info.name = name;  this.info.direction = direction;  }  catch (Exception e)...{  throw new Exception(e.Message);  }  }   /**//// <summary>  /// 构造函数  /// </summary>  /// <param name="t">进行比较的类型的实例</param>  /// <param name="name">进行比较对象的属性名称</param>  /// <param name="direction">比较方向(升序/降序)</param>  public Reverser(T t, string name, ReverserInfo.Direction direction)  ...{  this.type = t.GetType();  this.info.name = name;  this.info.direction = direction;  }   //必须!实现IComparer<T>的比较方法。  int IComparer<T>.Compare(T t1, T t2)  ...{  object x = this.type.InvokeMember(this.info.name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty, null, t1, null);  object y = this.type.InvokeMember(this.info.name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty, null, t2, null);  if (this.info.direction != ReverserInfo.Direction.ASC)  Swap(ref x, ref y);  return (new CaseInsensitiveComparer()).Compare(x, y);  }   //交换操作数  private void Swap(ref object x, ref object y)  ...{  object temp = null;  temp = x;  x = y;  y = temp;  }  }   /**//// <summary>  /// 对象比较时使用的信息类  /// </summary>  public struct ReverserInfo  ...{  /**//// <summary>  /// 比较的方向,如下:  /// ASC:升序  /// DESC:降序  /// </summary>  public enum Direction  ...{  ASC = 0,  DESC,  };   public enum Target  ...{  CUSTOMER = 0,  FORM,  FIELD,  SERVER,  };   public string name;  public Direction direction;  public Target target;  }

上面主要是运用了C#的反射 和 Framework中的排序算法。

像上面那样实现接口后,就可以使用List<T>进行升序/降序 排序了。

测试代码如下:

using System;  using System.Collections.Generic;  using System.Collections;  using System.Reflection;  using System.Text;   namespace List_T_SortTest_u_2  ...{

测试Reverser代码段#region 测试Reverser<T>代码段

/**//// <summary>  /// 实体类User,测试用  /// </summary>  public class User  ...{  protected string _name;  protected int _age;  protected string _address;   public User(string name, int age, string address)  ...{  this._name = name;  this._age = age;  this._address = address;  }   public string Name  ...{  get ...{ return _name; }  set ...{ _name = value; }  }   public int Age  ...{  get ...{ return _age; }  set ...{ _age = value; }  }   public string Address  ...{  get ...{ return _address; }  set ...{ _address = value; }  }  }   /**//// <summary>  /// 主程序类(启动类),测试用  /// </summary>  class Program  ...{  static void Main(string[] args)  ...{  List<User> userList = new List<User>();  User user;   user = new User("Wang", 21, "ShenYang");  userList.Add(user);  user = new User("Yan", 27, "JinZhou");  userList.Add(user);  user = new User("Liu", 26, "BeiJing");  userList.Add(user);  user = new User("Zhao", 30, "ChaoYang");  userList.Add(user);  user = new User("Yang", 27, "FuXin");  userList.Add(user);   //for (int i = 0; i < ar.Count; i++ )  //    ;  Console.Write("Name     ");  Console.Write("Age      ");  Console.Write("Address  " + " " + " ");  Console.WriteLine("-----------------------");  foreach (User u in userList)  ...{  Console.Write(u.Name + "    ");  Console.Write(u.Age + "    ");  Console.Write(u.Address + "    " + " ");  }  Console.WriteLine();   Reverser<User> reverser = new Reverser<User>(user.GetType(), "Name", ReverserInfo.Direction.DESC);  userList.Sort(reverser);  Console.WriteLine();  foreach (User u in userList)  ...{  Console.Write(u.Name + "    ");  Console.Write(u.Age + "    ");  Console.Write(u.Address + "    " + " ");  }  Console.WriteLine();   reverser = new Reverser<User>(user.GetType(), "Age", ReverserInfo.Direction.ASC);  userList.Sort(reverser);  Console.WriteLine();  foreach (User u in userList)  ...{  Console.Write(u.Name + "    ");  Console.Write(u.Age + "    ");  Console.Write(u.Address + "    " + " ");  }   Console.Read();  }  }  #endregion  }

看完上述内容,你们对C#中有哪些List排序方法有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI