簡體   English   中英

排序清單 <T> 按方法結果收集。

[英]Sort List<T> collection by method result.

我有下一堂課和這些課的集合。 我怎樣才能按Perimeter()和asc對這個集合進行排序?

    public class Circle
    {
        private double _r;

        public Double Radius
        {
            get { return _r; }
            set { _r = value; }
        }

        public double Perimeter ()
        {
            return 2*Math.PI*Radius;
        }
    }
...
var lst = new List<Circle>();

lst = lst.OrderBy(x => x.Perimeter()).ToList()應該lst = lst.OrderBy(x => x.Perimeter()).ToList() 還有一個OrderByDesc方法可用。

當然,您也可以按照Rob4md的建議使用LINQ查詢語法,但是請記住,所有LINQ查詢都返回IEnumerable並延遲執行。
您應該盡快使用ToList()ToArray()類的急切操作來執行它們,因為您可能最終會多次執行枚舉。

您可以查看MSDN上的101 LINQ Samples頁面 關於如何使用LINQ的示例很多,也介紹了OrderBy

您可以使用linq語句執行此操作。 使用您的圈子課程嘗試以下控制台程序:

        var circles = new List<Circle>();
        for (int i = 10; i > 0; i--)
        {
            Circle c = new Circle();
            c.Radius = i;
            circles.Add(c);
        }

        var orderList = from c in circles
                        orderby c.Perimeter() ascending
                        select c;

        foreach (var circle in orderList)
            Console.WriteLine(circle.Perimeter());

List有一個Sort方法,該方法將比較器對象作為輸入。

首先,定義比較器:

public class PerimeterComparer: IComparer<Circle>
{
  public int Compare(Circle x, Circle y)
  {
    if(x.Perimeter() > y.Perimeter()) { return -1; }
    if(x.Perimeter() < y.Perimeter()) { return 1; }
    return 0;
  }
} 

然后調用sort方法:

lst.Sort(new PerimeterComparer());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM