作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个通用的项目列表。每个项目都包含一个 DateTime 字段。我想以最优雅和高效的方式使用 Linq 在列表中找到最新的项目。
在我的案例中,优雅比效率更重要,但也以高效的方式做到这一点会很好。
谢谢。
阅读答案后:这是代码(以及我喜欢的答案):
using System.Collections.Generic;
using System.Linq;
class Item
{
public Item Date { get; set; }
public string Name { get; set; }
}
static void Main(string[] args)
{
List<Item> items = CreateItems();
Item newest;
if (items.Count == 0)
newest = null;
else
newest = items.OrderByDescending(item => item.Date).First();
}
最佳答案
为了优雅,我会根据日期时间字段对集合进行排序并返回第一项,例如:
set.OrderByDescending(x => x.DateTime)
.FirstOrDefault();
这将创建已排序集合的内存中表示,因此效率不是很好。对于未排序的集合,最有效的解决方案是遍历所有项目并保存最新的。您可以通过执行我发现语法上一团糟的聚合操作来使用 linq。
或者,您可以将项目存储在排序集合中,例如 SortedSet。对于大多数集合,这有一个更复杂的插入时间 0(log2) 而不是 O(1),但它允许您立即对日期时间进行排序,因此选择 O(1) 而不是 O(n) 中的最新项目。
关于c# - 使用 Linq 在 C# 泛型列表中查找最新项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10810365/
我是一名优秀的程序员,十分优秀!