如何对自定义类数组进行排序?

我有一个2字符串和1双(金额)的类。

class捐赠者

  • 字符串名称
  • 字符串评论
  • 双倍金额

现在我已经填充了一系列捐款人。
我如何按金额排序?

如果你实现IComparable你可以这样做:

 public class Donator :IComparable { public string name { get; set; } public string comment { get; set; } public double amount { get; set; } public int CompareTo(Donator other) { return amount.CompareTo(other.amount); } } 

然后,您可以根据需要调用sort,例如:

 var donors = new List(); //add donors donors.Sort(); 

.Sort()调用您为排序实现的CompareTo()方法。

还有没有IComparable的lambda替代方案:

 var donors = new List(); //add donors donors.Sort((a, b) => a.amount.CompareTo(b.amount)); 

您还可以使用代理人 :

 class Program { static void Main(string[] args) { List myDonors = new List(); // add stuff to your myDonors list... myDonors.Sort(delegate(Donor x, Donor y) { return x.amount.CompareTo(y.amount); }); } } class Donor { public string name; public string comment; public double amount; } 

通过实现IComparable然后使用Array.Sort

 public class Donator : IComparable { public string name; public string comment; public double amount; public int CompareTo(object obj) { // throws invalid cast exception if not of type Donator Donator otherDonator = (Donator) obj; return this.amount.CompareTo(otherDonator.amount); } } Donator[] donators; // this is your array Array.Sort(donators); // after this donators is sorted 

您可以使用MyArray.OrderBy(n => n.Amount)您已包含System.Linq命名空间。

例如,我总是使用列表通用

 List MyList; 

然后我调用MyList.Sort

 MyList.Sort(delegate (Donator a, Donator b) { if (a.Amount < b.Amount) return -1; else if (a.Amount > b.Amount) return 1; else return 0; ); 

这是一种无需实现接口的排序。 这是使用通用列表

  List list = new List(); Donator don = new Donator("first", "works", 98.0); list.Add(don); don = new Donator("first", "works", 100.0); list.Add(don); don = new Donator("middle", "Yay", 101.1); list.Add(don); don = new Donator("last", "Last one", 99.9); list.Add(don); list.Sort(delegate(Donator d1, Donator d2){ return d1.amount.CompareTo(d2.amount); }); 

另一种方法是创建一个实现IComparer的类,然后在Comparer类中传递一个重载。

http://msdn.microsoft.com/en-us/library/8ehhxeaf.aspx

这样,您可以为所需的每种特定排序设置不同的类。 您可以创建一个按名称,金额或其他方式排序。