我需要按发布日期对 MediaItem 对象的 List<> 进行排序...发布日期不是项目的属性。因此,我最初的意图是暂时添加一个发布日期属性,加载它们,排序,然后放弃该属性。我工作中的某个人建议我使用 Tuple 并使用 LINQ 进行排序......我在我的代码片段测试中已经了解了这一点,填写了 List<>......但我不确定如何使用该日期属性进行排序LINQ。我会继续寻找我的结束,但如果有人有任何帮助,我将不胜感激。谢谢。
List<Tuple<MediaItem, DateTime>> list = new List<Tuple<MediaItem, DateTime>>();
for (int i = 0; i <= 10; i++)
{
DateTime date = new DateTime(2011, i, 1);
MediaItem item = new MediaItem();
list.Add(new Tuple<MediaItem, DateTime>(item, date));
}
最佳答案
您可以使用 OrderBy( )
LINQ 运算符执行排序;它允许您传递一个函数,该函数提取要排序的元素。由于元组的第二个成员是日期,我们按 Item2
排序.
var result = list.OrderBy( x => x.Item2 ).ToList();
您可以使用 OrderByDescending()
在 LINQ 中反转顺序而不是 `OrderBy()。
另请注意,您必须具体化结果或迭代它们,因为 OrderBy()
方法默认是惰性的。上面的示例具体化了列表的副本。
如果您想就地对列表进行排序(而不是创建一个新列表),您可以提供 Comparison<T>
委托(delegate)给 Sort()
方法。
list.Sort( (a,b) => a.Item2.CompareTo(b.Item2) );
但是,您可以做得更好 - 如果您总是希望按排序顺序维护列表,您可以使用 SortedList class 而不是......但是你必须实现自定义 IComparer<Tuple<MediaItem, DateTime>>
在这种情况下。在这种情况下,当您添加项目时,它们将始终按排序顺序进行维护。
关于c# 使用 Tuple 对 List<> 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5781330/