【问题标题】:Sorting out list with several properties排序具有多个属性的列表
【发布时间】:2013-02-06 10:26:59
【问题描述】:

我对在 C# 中排序列表感到很困惑,我已经阅读了不同的排序教程,例如使用列表(排序方法)或使用 IComparable 进行排序,但实际上没有什么能帮助我实现我想要的。

例如,我有一个汽车列表,

Car Number

Car Title

and few other properties

现在车号可以是任意双数,也可以是Nan(null),Car Title 永远不能为null。

我想对列表进行排序,首先它按车号排序,如果它们不适用于汽车,则使用其标题对其余汽车进行排序。

所以如果我有这样的东西,

Car 1      100.0 (car number)                  BMW x6 (car name)
Car 2      (there isn't any car number)        Mercedies A class (car name)
Car 3      99.0                                Alpha Romeo
Car 4      1.2                                 Jeep
Car 5      4.1                                 Victoria Marshall 1933
Car 6      no number                           Vauxhal

输出我希望我的列表类被排序为

Car 4, Car 5, Car 3, Car 1, Car 2, Car 6

感谢您的帮助。

【问题讨论】:

  • 我创建了一个具有属性的类,但不知道之后该做什么来整理它,如果我使用 ICompareable 它只会整理车号而不是其余的车号
  • -1 票似乎有点苛刻

标签: c# list visual-studio-2008 sorting .net-2.0


【解决方案1】:

尝试类似的东西

var lst = new List<Cars>()

//add cars to list

lst = lst.Orderby(c => c.CarNumber).ToList();

你可以这样扩展它:

lst = lst.Orderby(c => c.CarNumber).ThenBy(c=> c.Title).ToList();

或者

您实现了 IComparable,因此它会按照您想要的方式进行排序:

public class Car : IComparable<Car> 
{ 
    public string Number { get; set; } 

    public int CompareTo(Car obj) 
    { 
        return obj.Number.CompareTo(Number); 
    } 
}

【讨论】:

  • 不,LINQ 自 C# 3.0 起可用,但您在标签中提到了 .net 3.5。
  • 你可以在 car 类上实现 IComparable,然后 list 上的 Sort() 方法应该可以工作
  • 是的,但它只会按车号而不是字母顺序排序
  • 这取决于您在 IComparable 中的实现:public class Car : IComparable&lt;Car&gt; { public string Number { get; set; } public int CompareTo(Car obj) { return obj.Number.CompareTo(Number); } }
  • 啊,我明白了,这就是我要找的东西,如果你可以将它添加到你的答案中,我会接受它:)
猜你喜欢
  • 2010-12-03
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多