Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#对列表进行排序<&燃气轮机;使用元组?_C#_Linq_Tuples - Fatal编程技术网

c#对列表进行排序<&燃气轮机;使用元组?

c#对列表进行排序<&燃气轮机;使用元组?,c#,linq,tuples,C#,Linq,Tuples,我需要按发布日期对MediaItem对象列表进行排序…发布日期不是该项的属性。因此,我最初的意图是临时添加一个publishdate属性,加载它们,排序并丢弃该属性。我的同事建议我使用Tuple和LINQ排序…我在代码段测试中已经了解了这一点,填写了列表…但我不确定如何使用LINQ按日期属性排序。我会继续找我的,但如果有人能帮上忙,我将不胜感激。谢谢 List<Tuple<MediaItem, DateTime>> list = new List<Tuple<

我需要按发布日期对MediaItem对象列表进行排序…发布日期不是该项的属性。因此,我最初的意图是临时添加一个publishdate属性,加载它们,排序并丢弃该属性。我的同事建议我使用Tuple和LINQ排序…我在代码段测试中已经了解了这一点,填写了列表…但我不确定如何使用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));
            }
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);
}