我有课:
public class Car
{
public int Year;
public int Speed;
public Car(int year, int Speed)
{
Year = year;
Speed = speed;
}
}
我有一份汽车清单。
list<Car> cars = new list<Car>()
{
new Car(2023, 120),
new Car(2023, 180),
new Car(2022, 130),
new Car(2023, 150),
new Car(2021, 200),
new Car(2022, 110)
};
我想首先根据年份对列表进行排序,然后根据速度对列表进行排序。因此,较新的汽车比速度更重要。所以最终的结果应该是这样的:
Car(2023, 180),
Car(2023, 150),
Car(2023, 120),
Car(2022, 130),
Car(2022, 110),
Car(2021, 200)
我怎样才能在 C# 中实现这一目标,并且最好不使用 system.linq?
我尝试了 linq 但无法实现这种排序。
IComparer<T>
实现来根据需要比较对象。只需确保您的比较器满足规则:自反性、反对称性和传递性。
public int Compare(Car x, Car y)
{
if(x.Year == y.Year){
return x.Speed.CompareTo(y.Speed);
return x.Year.CompareTo(y.Year);
}
我怎样才能在 C# 中实现这一目标,并且最好不使用 system.linq?
如果您有性能问题,您应该在做出“linq 太慢”之类的结论之前验证您的假设。虽然 linq 会有一些开销,但对于小型列表来说可能并不重要,而对于较大的列表,您可能应该尝试保持列表排序。所以我会首先使用
OrderBy
和 ThenBy
,并测量是否足够快。
如果您想对 就地排序(即“不使用 Linq”),您可以使用
Sort
:
cars.Sort((a, b) => {
int compare = a.Year.CompareTo(b.Year);
return compare == 0
? b.Speed.CompareTo(a.Speed)
: compare;
});