C# c列表按最小最大int分组

C# c列表按最小最大int分组,c#,list,tuples,max,min,C#,List,Tuples,Max,Min,我想按以下元组进行分组: List<Tuple<string, string, int>> tu = new List<Tuple<string, string, int>>(); tu.Add(new Tuple<string, string, int>("a", "b", 201601)); tu.Add(new Tuple<string, string, int>("a", "b", 201602)); tu.Add(

我想按以下元组进行分组:

List<Tuple<string, string, int>> tu = new List<Tuple<string, string, int>>();
tu.Add(new Tuple<string, string, int>("a", "b", 201601));
tu.Add(new Tuple<string, string, int>("a", "b", 201602));
tu.Add(new Tuple<string, string, int>("a", "b", 201603));
tu.Add(new Tuple<string, string, int>("c", "d", 201601));
tu.Add(new Tuple<string, string, int>("c", "d", 201602));
在新元组中,结果应如下所示:

//Item1, Item2, Min(Item2), Max(Item3)
List<Tuple<string, string, int, int>> newtu = new List<Tuple<string, string, int, int>>();

a,b,201601,201603
c,d,201601,201602
你能帮我吗

from t in tu
group t by new { t.Item1, t.Item2 } into g
select Tuple.Create(g.Key.Item1, g.Key.Item2, g.Min(t => t.Item3), g.Max(t => t.Item3));
建议:永远不要在C中使用元组


建议:不要在C中使用元组。请按匿名类型分组,然后在组中使用最小值+最大值:

List<Tuple<string, string, int, int>> newtu = tu
    .GroupBy(t => new { t1 = t.Item1, t2 = t.Item2 })
    .Select(g => Tuple.Create(g.Key.t1, g.Key.t2, g.Min(t => t.Item3), g.Max(t => t.Item3)))
    .ToList();

按匿名类型分组,然后对组使用最小值+最大值:

List<Tuple<string, string, int, int>> newtu = tu
    .GroupBy(t => new { t1 = t.Item1, t2 = t.Item2 })
    .Select(g => Tuple.Create(g.Key.t1, g.Key.t2, g.Min(t => t.Item3), g.Max(t => t.Item3)))
    .ToList();

我想=>好的,但是必须尝试什么?我想=>好的,但是必须尝试什么?我很好奇为什么你会说永远不要使用元组?当然,对于私有/内部成员来说,这是可以接受的,因为您可以维护上下文?元组可用于获取具有较短生存期的类型和方法上下文,或者用于在两个方法之间进行通信,其中返回元组的方法应该是私有的。无论如何,我已经见过多次使用元组的代码。理解那里储存的东西是一件非常痛苦的事情。如果你不知道确切的上下文,就无法猜测。算法如下——您进入返回元组的方法,检查存储在项中的内容,然后返回代码并使用它。与创建元组相同。你应该准确地记住在哪个位置放什么。否则元组的接收者将得到错误的数据。我是一个相当普通的人,可以在记忆中保存大约7个项目。在元组中保留数据的位置大大减少了我的内存:作为一个例子,只要看看这个答案中的代码,它是没有意义的Item1、Item2和Item3-即使在这个小片段中,阅读起来也很困难。@TimSchmelter这个元组将进入一个列表,在我看来,这是不好的,即使它是类的局部。编写一个带有命名属性的小类非常快,不这样做简直是懒惰。我个人写的代码别人也可以读,包括我未来的自己。我很好奇为什么你会说永远不要使用元组?当然,对于私有/内部成员来说,这是可以接受的,因为您可以维护上下文?元组可用于获取具有较短生存期的类型和方法上下文,或者用于在两个方法之间进行通信,其中返回元组的方法应该是私有的。无论如何,我已经见过多次使用元组的代码。理解那里储存的东西是一件非常痛苦的事情。如果你不知道确切的上下文,就无法猜测。算法如下——您进入返回元组的方法,检查存储在项中的内容,然后返回代码并使用它。与创建元组相同。你应该准确地记住在哪个位置放什么。否则元组的接收者将得到错误的数据。我是一个相当普通的人,可以在记忆中保存大约7个项目。在元组中保留数据的位置大大减少了我的内存:作为一个例子,只要看看这个答案中的代码,它是没有意义的Item1、Item2和Item3-即使在这个小片段中,阅读起来也很困难。@TimSchmelter这个元组将进入一个列表,在我看来,这是不好的,即使它是类的局部。编写一个带有命名属性的小类非常快,不这样做简直是懒惰。我个人写的代码别人也可以读,包括我未来的自己。