c# - 从数组中只选择最好的项目

标签 c# arrays linq sorting

我正在努力想出一个 linq 语句,我想在其中只选择数组中具有最高版本的一些项目。 给定一组应用程序,例如:

[{name="Adobe", version=1},
{name="Adobe", version=2},
{name="Adobe", version=3},
{name="VLC", version=1},
{name="VLC", version=2},
{name="VLC", version=3}]

我需要一个 linq 来仅选择 1 个 adobe 应用程序(版本最高的那个)和 1 个 VLC 应用程序。 结果应该是这样的:

[{name="Adobe", version=3},
{name="VLC", version=3}]

到目前为止我得到的最好的是:

var names = apps.Select((n => n.name)).Distinct();
foreach (var name in names)
{
    var latest = apps.Where(n => n.name == name).OrderByDescending(n => n.version).FirstOrDefault();
    //add latest to the new appList
}

我一直在思考是否有更简单、仅 linq 的方法来执行此操作。有什么建议吗?

谢谢。

最佳答案

你可以尝试这样的事情:

var latest = apps.GroupBy(x=>x.name)
                 .Select(x=> new 
                 { 
                     Name=x.Key, 
                     Version = x.OrderByDescending(y=>y.version)
                                .First().version
                 });

最初,我们将 GroupBy 作为应用程序的名称。然后我们选择每个组的项目,具有最新版本。

关于c# - 从数组中只选择最好的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27019672/

相关文章:

c# - 流利的查询表达式——两者之间有什么优势吗?

c# - 未发出 startdocprinter 调用 OnEndPrint

php - 使用 min() 获取包含最小值的数组

c# - 如何使用 UNION 对字符/字符串数组进行分组?

c# - 还有另一种方法可以执行此查询吗? (包含 linq-to-sql 查询中的拆分字符串)

c# - 对 Dictionary<int, double> 类型的 Linq 查询

C#:如果 Linq where 子句中的条件

c# - 为什么默认 C# 类(由 Microsoft 编写)不遵守与编码人员编写的类相同的 C# 规则

c# - "From any class-type S to any interface-type T, provided S is not sealed and provided S does not implement T."到底是什么意思?

arrays - 检查数组的所有元素是否相同