c# 使用 Tuple 对 List<> 进行排序?

标签 c# linq tuples

我需要按发布日期对 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/

相关文章:

python - 字典中元组第一项的平均值

c# - 从资源中加载嵌入的动画 Cursor

c# - 如何从 .mov 文件中提取开始时间码和持续时间/长度元数据?

c# - 加密名称

c# - LINQ - 帮我举个例子,我觉得 LINQ 应该可以解决!

python - 重载 + 以支持元组

c# - Entityframework 错误 : "The type ' . .....' 出现在单个 LINQ to Entities 查询中的两个结构不兼容的初始化中

c# - DbContext.Set() 上的 LINQ

asp.net-mvc - 如何在c#中查询类继承?

Python - 元组和内存管理