gpt4 book ai didi

c# - LINQ 中的排序和分组

转载 作者:可可西里 更新时间:2023-11-01 08:04:36 29 4
gpt4 key购买 nike

我有一个字符串元组列表,比如 (P1,P2)

我想知道是否有一个 LINQ 语句,我可以在其中按 P1(按升序)分组,并让该组包含该组的所有 P2 值(按降序)。

对于输入:("A","B"), ("A","C"), ("D","B")我想要两组:“A”和“D”(按此顺序,每次)其中“A”组包含“C”和“B”(按此顺序,每次),“D”组包含“B”。

这是否可以通过内置的 LINQ 类实现,还是我需要自己迭代这些组并对其进行排序?

最佳答案

不,这并不难 - 您只需要跟踪查看的是组还是组中的元素。这是一个示例查询:

var query = from tuple in tuples
orderby tuple.P1
group tuple.P2 by tuple.P1 into g
select new { Group = g.Key,
Elements = g.OrderByDescending(p2 => p2) };

这是一个完整的示例(如果您使用的是 .NET 3.5,则为简单起见避免使用 .NET 4 的 Tuple 类型):

using System;
using System.Collections.Generic;
using System.Linq;

public class MyTuple
{
public string P1 { get; set; }
public string P2 { get; set; }
}

class Test
{
static void Main()
{
List<MyTuple> tuples = new List<MyTuple>
{
new MyTuple { P1 = "A", P2 = "B" },
new MyTuple { P1 = "A", P2 = "C" },
new MyTuple { P1 = "D", P2 = "B" },
};

var query = from tuple in tuples
orderby tuple.P1
group tuple.P2 by tuple.P1 into g
select new { Group = g.Key,
Elements = g.OrderByDescending(p2 => p2) };

foreach (var group in query)
{
Console.WriteLine("{0}:", group.Group);
foreach (var value in group.Elements)
{
Console.WriteLine(" {0}", value);
}
}
}
}

请注意,如果您愿意在“需要知道”的基础上进行订购,它会稍微简单一些:

var query = from tuple in tuples
orderby tuple.P1
group tuple.P2 by tuple.P1;

foreach (var group in query)
{
Console.WriteLine("{0}:", group.Key);
foreach (var value in group.OrderByDescending(x => x))
{
Console.WriteLine(" {0}", value);
}
}

关于c# - LINQ 中的排序和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2724198/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com