c#对列表进行排序<&燃气轮机;使用元组?
我需要按发布日期对MediaItem对象列表进行排序…发布日期不是该项的属性。因此,我最初的意图是临时添加一个publishdate属性,加载它们,排序并丢弃该属性。我的同事建议我使用Tuple和LINQ排序…我在代码段测试中已经了解了这一点,填写了列表…但我不确定如何使用LINQ按日期属性排序。我会继续找我的,但如果有人能帮上忙,我将不胜感激。谢谢c#对列表进行排序<&燃气轮机;使用元组?,c#,linq,tuples,C#,Linq,Tuples,我需要按发布日期对MediaItem对象列表进行排序…发布日期不是该项的属性。因此,我最初的意图是临时添加一个publishdate属性,加载它们,排序并丢弃该属性。我的同事建议我使用Tuple和LINQ排序…我在代码段测试中已经了解了这一点,填写了列表…但我不确定如何使用LINQ按日期属性排序。我会继续找我的,但如果有人能帮上忙,我将不胜感激。谢谢 List<Tuple<MediaItem, DateTime>> list = new List<Tuple<
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));
}
List List=新列表();
对于(int i=0;i一种方法是使用该方法,使用lambda表达式创建适当的比较
委托
// 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));
当然,这假设列表中没有空引用,而您的示例中没有空引用。您可以使用OrderBy()
LINQ运算符来执行排序;它允许您传递一个函数来提取要排序的元素。由于元组的第二个成员是日期,因此我们按Item2
排序
var result = list.OrderBy( x => x.Item2 ).ToList();
您可以使用OrderByDescending()
而不是`OrderBy(),在LINQ中反转排序
另外,请注意,您必须具体化结果或对其进行迭代,因为默认情况下,OrderBy()
方法是惰性的
如果要对列表进行适当排序(而不是创建一个新列表),可以向该方法提供一个比较
委托
但是,您可以做得更好—如果您总是希望按排序顺序管理列表,您可以使用该类……但是在这种情况下,您必须实现一个自定义的IComparer
。在这种情况下,当您添加项时,它们将始终按排序顺序维护。list list=new list();
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));
}
list.Sort((a, b) => a.Item2.CompareTo(b.Item2));
foreach (var element in list)
{
Console.WriteLine(element);
}
对于(int i=0;i a.Item2.CompareTo(b.Item2));
foreach(列表中的var元素)
{
控制台写入线(元素);
}
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));
}
list.Sort((a, b) => a.Item2.CompareTo(b.Item2));
foreach (var element in list)
{
Console.WriteLine(element);
}