我需要按发布日期对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));
}
Run Code Online (Sandbox Code Playgroud)
LBu*_*kin 16
您可以使用OrderBy( )LINQ运算符来执行排序; 它允许您传递一个提取元素的函数进行排序.由于元组的第二个成员是日期,我们按顺序排列Item2.
var result = list.OrderBy( x => x.Item2 ).ToList();
Run Code Online (Sandbox Code Playgroud)
您可以使用OrderByDescending()而不是`OrderBy()来反转LINQ中的顺序.
此外,请注意您必须实现结果或迭代它们,因为OrderBy()默认情况下该方法是惰性的.上面的示例实现了列表的副本.
如果要对列表进行排序(而不是创建新列表),则可以Comparison<T>为该Sort()方法提供委托.
list.Sort( (a,b) => a.Item2.CompareTo(b.Item2) );
Run Code Online (Sandbox Code Playgroud)
但是,您可以做得更好 - 如果您总是希望按排序顺序排列列表,则可以使用SortedList类...但是IComparer<Tuple<MediaItem, DateTime>>在这种情况下您必须实现自定义.在这种情况下,当您添加项目时,它们将始终按排序顺序进行维护.
一种方法是使用该List<T>.Sort方法,使用lambda表达式创建适当的Comparison<T>委托.
// Sorts tuples in chronological order. To use reverse chronological order,
// use t2.Item2.CompareTo(t1.Item2) instead.
list.Sort((t1, t2) => t1.Item2.CompareTo(t2.Item2));
Run Code Online (Sandbox Code Playgroud)
这当然假定列表中没有空引用,这在您的示例中不可能存在.
| 归档时间: |
|
| 查看次数: |
9134 次 |
| 最近记录: |