2012-07-10 65 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()在开始的时候开车。

相关问题