是使用LINQ查询和递归。
首先,我们需要定义一个数据结构来表示嵌套组,可以使用类或结构体。假设我们有一个名为Group的类,具有一个名称属性和一个子组集合属性。
public class Group
{
public string Name { get; set; }
public List<Group> SubGroups { get; set; }
}
接下来,我们可以编写一个方法,该方法接受平面数据集合和嵌套层级作为输入,并返回转换后的嵌套组集合。
public List<Group> ConvertToNestedGroups(List<string> data, int levels)
{
var rootGroups = new List<Group>();
// 递归函数,将平面数据转换为嵌套组
void RecursiveConvert(Group parentGroup, List<string> remainingData, int currentLevel)
{
if (currentLevel >= levels || remainingData.Count == 0)
return;
var distinctValues = remainingData.Distinct();
foreach (var value in distinctValues)
{
var group = new Group { Name = value };
parentGroup.SubGroups.Add(group);
var filteredData = remainingData.Where(d => d != value).ToList();
RecursiveConvert(group, filteredData, currentLevel + 1);
}
}
RecursiveConvert(null, data, 0);
return rootGroups;
}
在此示例中,我们使用递归函数RecursiveConvert
来处理转换过程。我们首先从根级别开始,然后根据当前级别和剩余数据集合的不同值创建子组。然后,我们使用过滤后的数据集合递归调用RecursiveConvert
,并增加当前级别。这样就可以逐级构建嵌套组。
以下是一个示例用法:
var data = new List<string> { "A", "A", "B", "C", "B", "C", "C" };
var levels = 2;
var nestedGroups = ConvertToNestedGroups(data, levels);
foreach (var group in nestedGroups)
{
Console.WriteLine($"Group: {group.Name}");
foreach (var subGroup in group.SubGroups)
{
Console.WriteLine($"- SubGroup: {subGroup.Name}");
}
}
输出结果:
Group: A
- SubGroup: B
- SubGroup: C
Group: B
- SubGroup: A
- SubGroup: C
Group: C
- SubGroup: A
- SubGroup: B
对于这个问题,腾讯云没有专门的产品或链接与其相关。以上是一种常见的方法,可以在C#中将平面数据转换为嵌套组。
领取专属 10元无门槛券
手把手带您无忧上云