如何按每个对象的成员对对象列表进行排序
本文关键字:对象 列表 排序 成员 何按每 | 更新日期: 2023-09-27 18:32:37
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,那么我如何按日期对蜡烛列表进行排序?
另外,如何从烛台中删除所有重复条目?
谢谢
非常标准,简单的linq。
var candleList = candleList.Distinct().OrderBy(x => x.date).ToList();
正如 Adam 在下面提到的,这只会删除列表中的重复实例,而不会删除所有相同属性值的实例。
您可以实现自己的IEqualityComparer<Candle>
作为通过此选项的选项。 IEqualityComparer
您可能想要查看 msdn,并阅读 Linq 和 Enumerable Methods:MSDN - 可枚举方法
如果您使用的是 .NET 3.5 及更高版本,则可以在 IList 上使用 OrderBy 扩展,如下所示:
var orderList = candleList.OrderBy(s => s.date);
或者您可以使用排序依据
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();
顺便说一下,stackoverflow中还有很多其他问题可以解释这些问题中的每一个,搜索它们,你会发现其他细节。
然后如何按日期对烛台进行排序?
var orderedList = candleList.OrderBy(p=>p.date);
另外,如何从烛台中删除所有重复条目?
您应该告诉我们如何比较两个candle
对象。假设通过date
你可以做到:
var uniqueList = candleList.GroupBy(p=>p.date).Where(p=>p.Count() == 1).ToList();
此外,您可以使用Distinct()
或引入此方法的IEqualityComparer<candle>
来比较两个蜡烛对象并删除重复项。