我需要按发布日期对 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();
您可以使用以下命令反转 LINQ 中的顺序OrderByDescending()
而不是`OrderBy()。
另请注意,您必须具体化结果或迭代它们,因为OrderBy()
方法默认是惰性的。上面的示例具体化了列表的副本。
如果您想就地对列表进行排序(而不是创建新列表),您可以提供Comparison<T>
委托给Sort() method.
list.Sort( (a,b) => a.Item2.CompareTo(b.Item2) );
然而,你可以做得更好 - 如果你总是想按排序顺序维护列表,你可以使用排序列表类而不是...但是你必须实现一个自定义IComparer<Tuple<MediaItem, DateTime>>
在这种情况下。在这种情况下,当您添加项目时,它们将始终按排序顺序维护。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)