You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LINQ按子属性分组:如何获取唯一标签列表及总数?

解决LINQ获取唯一标签列表及统计的问题

嘿,我来帮你搞定这个问题!看起来你需要把所有用户的标签合并处理,得到唯一标签列表和对应的统计数据——核心问题大概率是没用到SelectMany来扁平化嵌套的标签数组,这是处理这类嵌套集合的关键步骤。

首先,先补全你的代码(包括User类的定义,LINQPad里可以直接写),然后分两种常见需求给出解决方案:

1. 获取所有唯一标签的列表,以及唯一标签的总数量

这个需求是得到所有不重复的标签,同时知道总共有多少个不同的标签:

public class User
{
    public int Id { get; set; }
    public string[] Tags { get; set; }
}

void Main()
{
    List<User> users = new List<User>()
    {
        new User { Id = 1, Tags = new string[]{"tag1", "tag2"}},
        new User { Id = 2, Tags = new string[]{"tag3", "tag7"}},
        new User { Id = 3, Tags = new string[]{"tag7", "tag8"}},
        new User { Id = 4, Tags = new string[]{"tag2", "tag8", "tag9"}} // 补全示例数据
    };

    // 关键:用SelectMany扁平化所有用户的标签数组,得到单一标签序列
    var uniqueTags = users.SelectMany(user => user.Tags)
                          .Distinct() // 去重得到唯一标签
                          .ToList();

    int uniqueTagTotal = uniqueTags.Count;

    // 在LINQPad里直接输出结果(也可以用Console.WriteLine)
    $"唯一标签总数:{uniqueTagTotal}".Dump();
    "唯一标签列表:".Dump();
    uniqueTags.Dump();
}

2. 统计每个标签的出现次数(如果你的“总数”指的是标签被使用的次数)

如果需要知道每个标签在所有用户中总共出现了多少次,用GroupBy来分组统计:

public class User
{
    public int Id { get; set; }
    public string[] Tags { get; set; }
}

void Main()
{
    List<User> users = new List<User>()
    {
        new User { Id = 1, Tags = new string[]{"tag1", "tag2"}},
        new User { Id = 2, Tags = new string[]{"tag3", "tag7"}},
        new User { Id = 3, Tags = new string[]{"tag7", "tag8"}},
        new User { Id = 4, Tags = new string[]{"tag2", "tag8", "tag9"}}
    };

    var tagUsageCounts = users.SelectMany(user => user.Tags)
                              .GroupBy(tag => tag) // 按标签分组
                              .Select(group => new 
                              {
                                  TagName = group.Key,
                                  UsageCount = group.Count()
                              })
                              .OrderByDescending(result => result.UsageCount) // 可选:按使用次数降序排列
                              .ToList();

    // LINQPad里直接输出统计结果
    "标签使用次数统计:".Dump();
    tagUsageCounts.Dump();
}

核心要点解释

  • SelectMany:它的作用是把每个用户的Tags数组“展开”成一个连续的标签序列,而不是保留数组的嵌套结构——这是你之前可能遗漏的关键步骤。如果不用它,直接对users操作会处理的是整个用户对象,而不是里面的标签。
  • Distinct():用于去除重复的标签,得到唯一集合。
  • GroupBy():用于按标签分组,之后可以统计每组的元素数量,也就是标签的出现次数。

内容的提问来源于stack exchange,提问作者TheWebGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:51:07