我试图通过查看元组列表中同一元组中另一个项目的值来获取项目的值。我最终需要做的是获取具有特定 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/