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

如何使用LINQ按语言索引对列表项进行分组?

嘿,这个需求其实挺好实现的,核心就是按Languages的索引来分组就行~ 我给你分两种常见场景讲,你可以对应自己的实际情况来用:

场景1:你的数据是字符串路径格式(比如model.Languages[0].Employer)

这种情况需要先从字符串里提取出Languages[x]里的索引x,然后按这个索引分组。我给你几个主流语言的实现示例:

JavaScript 实现

// 假设你的原始数据是这样的数组
const data = [
  { path: 'model.Languages[0].Employer', value: '字节跳动' },
  { path: 'model.Languages[0].Title', value: '前端开发' },
  { path: 'model.Languages[1].Employer', value: '腾讯', },
  { path: 'model.Languages[1].Title', value: '后端开发' }
];

// 用reduce做分组
const groupedResult = data.reduce((acc, item) => {
  // 用正则匹配出Languages后面的索引数字
  const indexMatch = item.path.match(/Languages\[(\d+)\]/);
  if (indexMatch) {
    const indexNum = parseInt(indexMatch[1]);
    const groupKey = `Group-${indexNum + 1}`; // 转成Group-1、Group-2的格式
    // 如果组不存在就新建,然后把当前项的path加进去
    if (!acc[groupKey]) acc[groupKey] = [];
    acc[groupKey].push(item.path);
    // 如果你需要存值而不是路径,就把item.path换成item.value就行
  }
  return acc;
}, {});

console.log(groupedResult);

C# 实现(用LINQ)

// 先定义数据模型
public class DataItem {
    public string Path { get; set; }
}

// 原始数据列表
var rawData = new List<DataItem> {
    new DataItem { Path = "model.Languages[0].Employer" },
    new DataItem { Path = "model.Languages[0].Title" },
    new DataItem { Path = "model.Languages[1].Employer" },
    new DataItem { Path = "model.Languages[1].Title" }
};

// 分组逻辑
var groupedData = rawData.GroupBy(item => {
    var match = System.Text.RegularExpressions.Regex.Match(item.Path, @"Languages\[(\d+)\]");
    return match.Success ? $"Group-{int.Parse(match.Groups[1].Value) + 1}" : "Uncategorized";
})
.ToDictionary(g => g.Key, g => g.Select(i => i.Path).ToList());

// 输出结果就是你要的分组结构

Python 实现

import re

# 原始数据
data_list = [
    {"path": "model.Languages[0].Employer"},
    {"path": "model.Languages[0].Title"},
    {"path": "model.Languages[1].Employer"},
    {"path": "model.Languages[1].Title"}
]

grouped = {}
for item in data_list:
    # 提取索引数字
    match = re.search(r'Languages\[(\d+)\]', item['path'])
    if match:
        idx = int(match.group(1))
        group_name = f"Group-{idx + 1}"
        if group_name not in grouped:
            grouped[group_name] = []
        grouped[group_name].append(item['path'])

print(grouped)
场景2:你的数据是直接的对象数组(比如model.Languages是一个数组,每个元素有Employer和Title属性)

这种情况更简单,直接遍历数组,按索引生成分组就行,不用正则:

JavaScript 示例

// 假设你的model结构是这样的
const model = {
  Languages: [
    { Employer: '字节跳动', Title: '前端开发' },
    { Employer: '腾讯', Title: '后端开发' }
  ]
};

const groupedObj = {};
model.Languages.forEach((langItem, index) => {
  const groupKey = `Group-${index + 1}`;
  // 把当前元素的Employer和Title放到对应组里
  groupedObj[groupKey] = [langItem.Employer, langItem.Title];
});

console.log(groupedObj);

C# 示例

// 定义Languages的元素模型
public class LanguageItem {
    public string Employer { get; set; }
    public string Title { get; set; }
}

// 假设你的model对象
var model = new {
    Languages = new List<LanguageItem> {
        new LanguageItem { Employer = "字节跳动", Title = "前端开发" },
        new LanguageItem { Employer = "腾讯", Title = "后端开发" }
    }
};

var grouped = new Dictionary<string, List<string>>();
for (int i = 0; i < model.Languages.Count; i++) {
    var key = $"Group-{i + 1}";
    grouped[key] = new List<string> { model.Languages[i].Employer, model.Languages[i].Title };
}

不管哪种场景,核心逻辑都是找到Languages的索引值,将相同索引的Employer和Title归为一组,你可以根据自己用的语言和数据格式来调整~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:59:09