2012-07-10 68 views
0

我有一個List<Vehicles>其中包含4項:排序列表放置的一個元素的頂部

Vehicles對象有2個屬性:VehIdVehName

在我的列表中的4項:

1)VehId : "LOR", VehName : "Lorry"

2)VehId : "CAR", VehName : "Car"

3)VehId : "BOA", VehName : "Boat"

4)VehId : "PLN", VehName : "Plane"

我想什麼做的就是把Car車輛到列表的頂部。我將如何做到這一點?通過使用.OrderBy().Sort()

+0

我假設你想要的那種效果持久?排序在'List '上,而'OrderBy'返回一個有序枚舉來迭代。它總是會是汽車?如果是這樣,事先簡單地['插入](http://msdn.microsoft.com/en-us/library/sey5k5z4.aspx)在相關的索引,並避免一起排序。 – 2012-07-10 10:29:43

+2

你用什麼標準對它進行分類? 「汽車」不是第一個按字母順序排列的[也不是最後一個。 – ClayKaboom 2012-07-10 10:30:01

+0

是的,我知道汽車不是第一個按字母順序排列的,它只是用戶選擇的最流行的選項,所以我希望把它放在我的列表頂部..所以它的默認選項.. – CallumVass 2012-07-10 10:31:20

回答

6

一種方法是使用Enumerable.OrderBy:

var ordered = vehicles 
     .OrderByDescending(v => v.VehId == "CAR") 
     .ThenBy(v => v.VehName); 

這裏有一個演示:http://ideone.com/QAgzd

2

執行IComparable<Vehicle>與你想要的標準,然後使用排序。

+0

我將如何實現這一目標? – CallumVass 2012-07-10 10:32:27

+0

讓車輛執行IComparable 。使用的標準可以是汽車第一,然後是字母。 – ColWhi 2012-07-10 10:34:30

1

像這樣的東西應該工作:

vehicles.Sort((a,b) => -(a.VehId == "CAR").CompareTo(b.VehId == "CAR")); 

,如果你願意,你可以採用同樣的邏輯爲IComparable<Vehicle>實施,以這樣的方式

class Vehicle : IComparable<Vehicle> 
{ 
    public int CompareTo(Vehicle other) 
    { 
     int c = (this.VehId == "CAR").CompareTo(this.VehId == "CAR"); 
     return c; 
    } 
    // other class code... 
} 

,然後你可以簡單地調用vehicles.Sort()在開始的時候開車。

相關問題