关于C#:如何按每个对象的成员对对象列表进行排序?

How can I sort a list of objects by a member of each object?

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
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>();

假设我在烛光上加了许多蜡烛,我怎么能按日期对烛光进行排序呢?

另外,如何从烛光列表中删除所有重复条目?

谢谢你


相当标准,简单的LINQ。

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

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

您可以实现自己的IEqualityComparer作为一个选项来通过这一过程。质量公司

您可能需要查看msdn,并阅读Linq和Enumerable方法:msdn-可枚举方法


如果您使用的是.NET 3.5及更高版本,则可以在ilist上使用orderby扩展,如下所示:

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

或者,您可以使用sortby

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

要删除重复项,可以执行以下操作:

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

最后要再次获得列表吗?

1
var finalList = distinctList.ToList();

以流利的方式:

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

顺便说一下,stackoverflow中还有很多其他的问题可以解释这些问题,搜索它们,你会发现其他的细节。


How can I then sort candleList by date?

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

Also, how can I remove all duplicate entries from candleList?

您应该告诉我们如何比较两个candle对象。假设你能做到:

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

此外,还可以使用Distinct()或将IEqualityComparer引入此方法来比较两个蜡烛对象并删除重复项。