[英]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.