C#中如何利用GroupBy实现将多分类文章归入对应多个分组?
解决多类别文章的分组问题
这个场景我之前处理过,直接用常规的GroupBy(x => x.Category)确实行不通——因为它只能把每个元素分配到一个组里。不过咱们换个思路,先把多类别的文章“拆解开”,再分组就完美解决了!
核心思路
- 扁平化处理:把每篇带有多个类别的文章,拆分成多个「类别+文章」的独立条目。比如“文章1”属于苹果和橙子,就拆成两个条目:(苹果, 文章1)、(橙子, 文章1)。
- 常规分组:对扁平化后的集合按类别分组,这样每个类别组里就会包含所有属于它的文章了。
代码示例(以C#为例)
首先定义文章类:
public class Article { public string Title { get; set; } public List<string> Categories { get; set; } }
模拟你的示例数据:
var articles = new List<Article> { new Article { Title = "文章1", Categories = new List<string> { "苹果", "橙子" } }, new Article { Title = "文章2", Categories = new List<string> { "苹果" } }, new Article { Title = "文章3", Categories = new List<string> { "橙子" } } };
关键的扁平化+分组步骤:
// 用SelectMany展开多类别,生成(类别, 文章)的键值对集合 var flattenedArticles = articles.SelectMany(article => article.Categories.Select(category => new { Category = category, Article = article }) ); // 按类别分组,得到目标结果 var groupedArticles = flattenedArticles.GroupBy(item => item.Category);
验证结果
我们可以遍历分组后的集合,看看输出是否符合预期:
foreach (var categoryGroup in groupedArticles) { Console.WriteLine($"【{categoryGroup.Key}】组:"); foreach (var entry in categoryGroup) { Console.WriteLine($" - {entry.Article.Title}"); } }
输出结果:
【苹果】组:
- 文章1
- 文章2
【橙子】组:- 文章1
- 文章3
完全符合你想要的效果!
内容的提问来源于stack exchange,提问作者Erica Stockwell-Alpert
相关产品推荐
相关产品推荐

