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

如何在C#中将多个列表的对应元素合并为单个对象?

解决方案:按索引对齐合并多列表

你原来用嵌套foreach的问题在于,它会生成三个列表的笛卡尔积(也就是所有元素的可能组合),比如[1,A,!]、[1,A,?]、[1,A,-]、[1,B,!]……这显然不是你要的按位置配对的结果。

正确的思路是:先找到三个列表中最长的那个的长度,然后按索引从0开始循环,每个位置上分别从三个列表中取对应索引的元素,没有元素的位置用NULL填充,最后把每个位置的三个元素组成一行存入结果集合。

C# 代码示例

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        // 定义你的三个列表
        var listA = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
        var listB = new List<string> { "A", "B", "C", "D" };
        var listC = new List<string> { "!", "?", "-" };

        // 找到最长列表的长度
        int maxLength = new[] { listA.Count, listB.Count, listC.Count }.Max();

        // 存储最终结果的集合(这里用List<List<object>>,也可以根据需求换成List<string>)
        var result = new List<List<object>>();

        for (int i = 0; i < maxLength; i++)
        {
            // 从每个列表取对应索引的元素,没有则用"NULL"填充
            var itemA = i < listA.Count ? (object)listA[i] : "NULL";
            var itemB = i < listB.Count ? listB[i] : "NULL";
            var itemC = i < listC.Count ? listC[i] : "NULL";

            // 组成一行
            var line = new List<object> { itemA, itemB, itemC };
            result.Add(line);

            // 输出验证(可选)
            Console.WriteLine($"line = [{string.Join(",", line)}]");
        }

        // 现在result里就存着所有合并后的行啦
    }
}

代码说明

  1. 确定最大长度:用Max()方法获取三个列表长度的最大值,确保循环能覆盖所有列表的元素。
  2. 按索引取值:循环每个索引i,判断i是否小于当前列表的长度,是的话取对应元素,否则用"NULL"填充。
  3. 存储结果:把每个索引对应的三个元素组成一个列表,加入到结果集合中,这样你就得到了一个包含所有合并行的单个对象。

如果需要直接生成字符串形式的行(比如"[1,A,!]"),可以把line换成字符串拼接:

string lineString = $"[{itemA},{itemB},{itemC}]";
resultStrings.Add(lineString); // 这里resultStrings是List<string>类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:29:22