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

C#中基于两个List生成含指定间隔0的新List问题求助

问题描述

现有两个List:

  • List1 = [1,2,3,4]
  • List2 = [1,4,1,3]
    需要生成新List3 = [1,0,2,0,0,0,0,3,0,4,0,0,0],规则是在List1的每个元素之后,插入对应List2中同索引元素数量的0。

现有代码如下:

List<int> idID = new List<int>();
idID.Add(1);
idID.Add(2);
idID.Add(3);
idID.Add(4);
List<int> Nevent = new List<int>();
Nevent.Add(1);
Nevent.Add(4);
Nevent.Add(1);
Nevent.Add(3);

int total = Nevent.Count;

for (int j = 0; j < total; j++)
{
    for (int i = 1; i <= Nevent[j]; i++)
    {                
        idID.Insert(i, 0);    //modify (____,0) of this line???
    }
}

string IDS = String.Join(",", idID);
Console.WriteLine(IDS);

提问者认为需要修改idID.Insert(i, 0)中的索引参数,换成动态计算的序列,但不知如何实现,询问修改方法或更优实现方式。

解决方案

一、修改现有代码的方法

核心是维护一个动态的插入位置变量,因为原List在插入元素后长度会变化,固定索引会导致插入位置错误。代码调整如下:

List<int> idID = new List<int> {1,2,3,4};
List<int> Nevent = new List<int> {1,4,1,3};

int currentPos = 1; // 初始指向第一个元素之后的位置
for (int j = 0; j < Nevent.Count; j++)
{
    // 插入对应数量的0
    for (int i = 0; i < Nevent[j]; i++)
    {                
        idID.Insert(currentPos, 0);
        currentPos++; // 插入后下一个0的位置后移一位
    }
    currentPos++; // 跳到下一个原元素的后方
}

string IDS = String.Join(",", idID);
Console.WriteLine(IDS); // 输出:1,0,2,0,0,0,0,3,0,4,0,0,0

逻辑说明

  • currentPos初始为1,对应List1第一个元素(1)之后的索引位置
  • 每插入一个0,currentPos加1,适配List长度变化后的新位置
  • 完成当前元素的0插入后,currentPos再加1,定位到下一个原List元素的后方

二、更优实现方式(避免频繁Insert操作)

List的Insert操作是O(n)复杂度,数据量大时效率较低。可以预先计算最终List的总长度,直接批量填充元素,减少性能开销:

List<int> idID = new List<int> {1,2,3,4};
List<int> Nevent = new List<int> {1,4,1,3};

// 预计算总长度:原List长度 + 所有Nevent元素的和
int totalLength = idID.Count + Nevent.Sum();
List<int> result = new List<int>(totalLength);

for (int j = 0; j < idID.Count; j++)
{
    // 添加原List元素
    result.Add(idID[j]);
    // 添加对应数量的0
    result.AddRange(Enumerable.Repeat(0, Nevent[j]));
}

string IDS = String.Join(",", result);
Console.WriteLine(IDS); // 输出:1,0,2,0,0,0,0,3,0,4,0,0,0

逻辑说明

  • 初始化结果List时指定容量,避免动态扩容的额外开销
  • 用AddRange配合Enumerable.Repeat批量添加0,比循环Insert效率更高
  • 遍历一次原List即可完成所有元素的填充,逻辑更简洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:39:32