如何按每个对象的成员对对象列表进行排序? [复制]

Posted

技术标签:

【中文标题】如何按每个对象的成员对对象列表进行排序? [复制]【英文标题】:How can I sort a list of objects by a member of each object? [duplicate] 【发布时间】:2013-09-23 13:32:50 【问题描述】:
class candle

    public DateTime date  get; set; 
    public double open  get; set; 
    public double high  get; set; 
    public double low  get; set; 
    public double close  get; set;      

List<candle> candleList = new List<candle>();

假设我在 candeList 中添加了许多蜡烛,那么如何按日期对蜡烛列表进行排序?

另外,如何从candleList 中删除所有重复的条目?

谢谢

【问题讨论】:

candleList.OrderBy(x=&gt;x.date) :) 两个相关的问题:1)你想对列表本身进行排序还是对排序后的输出进行迭代? 2) 你如何认为两个candle 实例相等? 【参考方案1】:

相当标准,简单的 linq。

var candleList = candleList.Distinct().OrderBy(x => x.date).ToList();

正如亚当下面提到的,这只会删除列表中的重复实例,而不是所有相同属性值的实例。

您可以实现自己的IEqualityComparer&lt;Candle&gt; 作为通过此选项的选项。 IEqualityComparer

您可能想看看 msdn,并阅读 Linq 和 Enumerable Methods: MSDN - Enumerable Methods

【讨论】:

Distinct 在一个类上只会做引用相等,而不是属性值。此外,这种排序不是就地的,它会产生一个IEnumerable @AdamHouldsworth,您的观点非常有效且相关。但这并没有使我的回答不正确(这是给反对者的)。我提供了更多信息。 我注意到了,我不是反对者。【参考方案2】:

如果您使用的是 .NET 3.5 及更高版本,则可以像这样在 IList 上使用 OrderBy 扩展:

var orderList = candleList.OrderBy(s => s.date);

您可以使用 SortBy 替代方法

var orderList = candleList.SortBy((x, y) => x.date.CompareTo(y.date) );

要删除重复项,您可以这样做:

var distinctList = orderList.GroupBy(x => x.date).Select(grp => grp.First());

终于又能拿到名单了

var finalList = distinctList.ToList();

流利的方式:

List<candle> finalList = candleList.OrderBy(s => s.date).Distinct().ToList();

顺便说一句,*** 中还有很多其他问题可以解释每个问题,搜索它们,您会找到其他详细信息。

【讨论】:

【参考方案3】:

我怎样才能按日期对蜡烛列表进行排序?

var orderedList = candleList.OrderBy(p=>p.date);

另外,如何从candleList 中删除所有重复的条目?

您应该告诉我们您如何比较两个candle 对象。假设date 你可以这样做:

var uniqueList = candleList.GroupBy(p=>p.date).Where(p=>p.Count() == 1).ToList();

此外,您可以使用Distinct() 或在此方法中引入IEqualityComparer&lt;candle&gt; 来比较两个蜡烛对象并删除重复项。

【讨论】:

以上是关于如何按每个对象的成员对对象列表进行排序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何按对象属性对 ArrayList 进行排序? [复制]

如何在VB中按某个组件对对象列表进行排序?

Android-java-如何按对象内的某个值对对象列表进行排序

如何按 C# 中的特定字段对对象列表进行排序?

使用比较器按特定顺序对对象列表进行排序

Python:如何按对象的特征或属性对对象列表进行分组? [复制]