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

如何使用LINQ将Animals对象列表转换为Groups对象列表?

使用LINQ实现Animals到Groups的转换

需求说明

需要将Animals类型的列表转换为Groups类型的列表:以动物所属的分类为分组依据,每个分组汇总所有属于该分类的动物示例。

输入的Animals列表示例

[
    {
        "example": "cat",
        "categories": ["group1", "group2", "group3"]
    },
    {
        "example": "dog",
        "categories": ["group1", "group3", "group4"]
    },
    {
        "example": "cow",
        "categories": ["group1"]
    }
]

期望输出的Groups列表示例

[
    {
        "category": "group1",
        "examples": ["cat", "dog", "cow"]
    },
    {
        "category": "group2",
        "examples": ["cat"]
    },
    {
        "category": "group3",
        "examples": ["cat", "dog"]
    },
    {
        "category": "group4",
        "examples": ["dog"]
    }
]

已定义的C#类

public class Animals
{
    public string Example { get; set; }    
    public List<string> Categories { get; set; }
}

public class Groups
{
    public string Category { get; set; }    
    public List<string> Examples { get; set; }
}

LINQ实现代码

通过SelectMany、GroupBy和Select的组合即可完成转换:

// 假设已有Animals类型的列表实例
List<Animals> animals = /* 你的Animals列表数据 */;

List<Groups> groups = animals
    // 拆分每个动物的分类,生成(分类, 动物示例)的独立条目
    .SelectMany(animal => animal.Categories.Select(category => new { Category = category, Example = animal.Example }))
    // 按分类名称分组
    .GroupBy(item => item.Category)
    // 将分组映射为Groups对象
    .Select(group => new Groups
    {
        Category = group.Key,
        Examples = group.Select(g => g.Example).ToList()
    })
    .ToList();

代码解释

  1. SelectMany:将每个Animals对象的多个分类拆分为独立条目,让每个分类都和对应的动物示例一一对应,解决一对多的拆分需求。
  2. GroupBy:以分类名称为键,把同分类下的所有动物示例聚集到同一分组中。
  3. Select:将每个分组转换为Groups对象,分组的键作为Category属性,分组内的所有动物示例收集为Examples列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:50:30