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

如何用LINQ展平含竖线分隔字符串的List<List<string>>

如何用LINQ展平包含多值分隔字符串的List<List>?

你猜的完全没错,SelectMany就是实现这个需求的核心工具!我们的思路是对每个原始子列表,把带|分隔的科目和分数拆分成对应的独立项,再和固定的姓名、年龄重新组合成新的子列表,最后用SelectMany把所有这些新子列表合并成一个大集合。

先看完整的实现代码:

// 原始输入列表
var matchedList = new List<List<string>>
{
    new List<string> { "Rob", "23", "Math", "98" },
    new List<string> { "Jim", "25", "Science|Math|LA", "92|99|89" }
};

// 展平处理
var flattenedList = matchedList
    .SelectMany(item => 
    {
        // 拆分科目和分数字符串为数组
        var subjects = item[2].Split('|');
        var scores = item[3].Split('|');
        
        // 可选:添加校验,确保科目和分数数量对应,避免后续出错
        if (subjects.Length != scores.Length)
            throw new InvalidOperationException("科目与分数的数量不匹配,请检查输入数据");
        
        // 将科目和分数一一配对,再与姓名、年龄组合成新的子列表
        return subjects.Zip(scores, (subject, score) => 
            new List<string> { item[0], item[1], subject, score });
    })
    .ToList();

代码拆解:

  • SelectMany:它的作用是将每个输入的子元素(这里就是原始列表里的每个List<string>)转换成一个序列,然后把所有这些序列拼接成一个单一的序列——这正是我们需要的“展平”效果。
  • Split('|'):把包含多个值的字符串拆分成独立的字符串数组,比如把"Science|Math|LA"拆成["Science", "Math", "LA"]。
  • Zip:这个方法会把两个数组按索引位置一一配对,比如把subjects的第n项和scores的第n项组合在一起,完美对应每个科目和它的分数。
  • 组合新列表:每一对科目+分数,都会和当前条目的姓名(item[0])、年龄(item[1])组合成一个新的List<string>,最终所有这些新列表被SelectMany合并成目标集合。

运行这段代码后,flattenedList就是你想要的包含4个元素的列表集合啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:57:43