gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:52:06 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com