c# - 如何根据元组列表中另一个项目的值获取另一个项目的值?

标签 c# list tuples

我试图通过查看元组列表中同一元组中另一个项目的值来获取项目的值。我最终需要做的是获取具有特定 Item2 的所有元组,从该选择中选择最新的 DateTime 并获取 Item1。

例如,如果我想最终从“程序员组”中获取最新的名称,我希望逻辑能够获取所有显示“程序员”的 Item2,看看哪一个具有最新的日期和输出” Stan”自 6/25 以来比 6/20 更新。

    List<Tuple<string, string, DateTime>> myList;
    myList.Add(new Tuple<string, string, DateTime>("Bob", "Programmer", 6/20/2013));
    myList.Add(new Tuple<string, string, DateTime>("Stan", "Programmer", 6/25/2012));
    myList.Add(new Tuple<string, string, DateTime>("Curly", "Athlete", 6/20/2013));

最佳答案

这是一个相当简单的 LINQ 操作。第一步是按 DateTime (Item3) 对列表进行排序,之后您可以在查询上链接 First() ,它将返回最新的项目。请注意,LINQ 操作不是就地完成的,这意味着 myList 中项目的顺序不会受到此操作的影响。它将创建一个新的 IEnumerable,按 tuple.Item3 排序,然后为您提供其中的第一项。

Tuple<string, string, DateTime> mostRecent = myList.Orderby(x => x.Item3).First();

要添加对组的限制,您只需添加一个 where 子句。

Tuple<string, string, DateTime> mostRecent = myList.Where(y => y.Item2 == "Programmer").Orderby(x => x.Item3).First();

我建议查看有关 LINQ to Objects 查询运算符的文档。我使用的所有内容都是标准查询运算符,您可能会在现代 C# 代码库中随处看到它们。如果您了解如何使用标准查询运算符(例如 Select、Where、OrderBy、ThenBy,或许还有 Join 和 SelectMany),您将更加熟练地操作集合。

关于c# - 如何根据元组列表中另一个项目的值获取另一个项目的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17220150/

相关文章:

c++ - 在可变参数模板中使用 lambda 调用 std::make_tuple - 这应该在 C++11 中工作吗?

c# - 使用字符串的 delim 标记字符串

list - 从 Scheme 中的列表中删除元素

python - 将文本列表转换为python列表

python - 按字符串中单词的数量对字符串列表进行排序

arrays - 如何检查元组数组是否包含 Swift 中的特定元组?

StringBuilder 的 C# String.Substring 等价物?

c# - 如何在运行时更改 unity Lighting Ambient color Intensity?

c# - 获取要序列化的扩展 LINQ 类属性

c# - 为什么在此示例中使用 Tuple 比使用 List 更快?