我试图通过查看元组列表中同一元组中另一个项的值来获取项的值。我最终需要做的是抓住所有具有特定Item2的元组,从该选择中选择最新的DateTime并获取Item1。
因此,例如,如果我想最终从“程序员组”中获取最新名称,我希望逻辑能够获取所有说“程序员”的Item2,看看哪一个具有最新日期和输出“斯坦“自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));
答案 0 :(得分:2)
使用LINQ这是一个相当简单的操作。第一步是按DateTime(Item3)对列表进行排序,之后您可以在查询上链接First()
,它将返回最新的项目。请注意,LINQ操作没有到位,这意味着myList
中的itmes顺序不会受此操作的影响。它将创建一个按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),您将更加熟练地使用集合。
答案 1 :(得分:2)
List<Tuple<string, string, DateTime>> myList = new List<Tuple<string,string,DateTime>>();
myList.Add(new Tuple<string, string, DateTime>("Bob", "Programmer", new DateTime(2013,6,20)));
myList.Add(new Tuple<string, string, DateTime>("Stan", "Programmer", new DateTime(2013, 6, 25)));
myList.Add(new Tuple<string, string, DateTime>("Curly", "Athlete", new DateTime(2013, 6, 20)));
var result = myList.Where(x => x.Item2.Equals("Programmer")).OrderByDescending(x => x.Item3).Take(1);