【问题标题】:C# Help: Sorting a List of Objects in C# [duplicate]C# 帮助:在 C# 中对对象列表进行排序 [重复]
【发布时间】:2010-10-29 20:40:20
【问题描述】:

可能的重复:
Sort objects using predefined list of sorted values
C# Help: Sorting a List of Objects in C#

双发

Sorting a List of objects in C#

public class CarSpecs
{

    public CarSpecs()
    {
    }

    private String _CarName;
    public String CarName
    {
        get { return _CarName; }
        set { _CarName = value; }
    }



    private String _CarMaker;
    public String CarMaker
    {
       get { return _CarMaker;}
       set { _CarMaker = value; }
    }


    private DateTime _CreationDate;
    public DateTime CreationDate
    {
        get { return _CreationDate; }
        set { _CreationDate = value; }
    }
}

这是一个列表,我正在尝试找出一种有效的方法来按汽车制造日期对该列表List<CarSpecs> CarList 进行排序,其中包含 6 辆(或任何整数数量)汽车。我本来打算做冒泡排序,但这行得通吗?有什么帮助吗?

谢谢

【问题讨论】:

标签: c# sorting class


【解决方案1】:
CarList = CarList.OrderBy( x => x.CreationDate ).ToList();

【讨论】:

  • Coehoom x 是什么?是拉姆达吗?如何定义?
  • @AdityaPatil x 是 CarList 序列中各个项目的占位符。 x => x.CreationDate 是一个表达式,它告诉OrderBy() 函数使用什么标准对项目进行排序。意思是按每一项的 CreationDate 属性排序。
  • 它在技术上称为 Lambda 表达式对吗?
【解决方案2】:

首先,使用 .Net 3.5 中引入的简写语法,您可以使此类定义更短:

public class CarSpecs
{
    public CarSpecs() { }

    public String CarName { get; set;
    public String CarMaker { get; set; }
    public DateTime CreationDate { get; set; }
}

这将编译成与上面的完全相同的类。

其次,您可以使用 Lambda 表达式或 LINQ 轻松对它们进行排序:

var linq = (from CarSpecs c in CarList
            orderby c.CreationDate ascending
            select c) as List<CarList>;

var lambda = CarList.OrderBy(c => c.CreationDate).ToList();

【讨论】:

    【解决方案3】:

    不要编写自己的排序算法。 .NET 有一个 Array.Sort() 方法专门用于此类事情。

    由于您有一个自定义对象,您需要定义如何比较 2 个对象,以便排序算法知道如何对它们进行排序。您可以通过 2 种方式中的一种来执行此操作:

    1. 让您的CarSpecs 类实现IComparable 接口
    2. 创建一个实现IComparer 的类,并将其作为参数与您的数组一起传递给Array.Sort()

    【讨论】:

      【解决方案4】:

      BCL 中已经存在排序算法 - Array.Sort() 和 List.Sort()。实现一个 IComparer 类,该类使用 CreationDate 确定排序顺序,然后将所有对象放入数组或列表中并调用相应的 Sort() 方法

      【讨论】:

        猜你喜欢
        • 2010-10-29
        • 2014-10-27
        • 2016-11-03
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 2021-12-03
        • 2014-12-26
        • 1970-01-01
        相关资源
        最近更新 更多