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

如何在循环中动态切换待修改数组,避免重复编写代码?

简化多数组赋值的循环代码

我现在需要批量修改多个数组,目前的实现是在循环里通过判断i的值,逐个操作attack1、attack2这类数组,代码如下:

for (int i = 0; i < 4; i++)
{
    if(i==0)
    {
        attack1[0] = attacks[i];
        attack1[1] = Convert.ToString(atdmg[i]);
        attack1[2] = ateffect[i];
        attack1[3] = Convert.ToString(ataccur[i]);
        attack1[4] = Convert.ToString(atmul[i]);
    }
    if (i == 1)
    {
        attack2[0] = attacks[i];
        attack2[1] = Convert.ToString(atdmg[i]);
        attack2[2] = ateffect[i];
        attack2[3] = Convert.ToString(ataccur[i]);
        attack2[4] = Convert.ToString(atmul[i]);
    }
    if (i == 2)
    {
        attack3[0] = attacks[i];
        attack3[1] = Convert.ToString(atdmg[i]);
        attack3[2] = ateffect[i];
        attack3[3] = Convert.ToString(ataccur[i]);
        attack3[4] = Convert.ToString(atmul[i]);
    }
    if (i == 3)
    {
        attack4[0] = attacks[i];
        attack4[1] = Convert.ToString(atdmg[i]);
        attack4[2] = ateffect[i];
        attack4[3] = Convert.ToString(ataccur[i]);
        attack4[4] = Convert.ToString(atmul[i]);
    }
}

我想简化这段代码,不用逐个写数组名,而是通过循环变量i动态切换要修改的attacki数组,类似下面的伪代码写法:

for (int i = 0; i < 4; i++)
{
        attacki[0] = attacks[i];
        attacki[1] = Convert.ToString(atdmg[i]);
        attacki[2] = ateffect[i];
        attacki[3] = Convert.ToString(ataccur[i]);
        attacki[4] = Convert.ToString(atmul[i]);
}

这段代码的作用是把其他数组的信息存入对应的attack数组,方便后续简化信息打印操作。


解决方案

方法1:用数组容器统一管理

最直接的简化方式是把attack1到attack4先放到一个数组里,然后循环操作这个容器数组的元素,这样就不用逐个判断i的值了:

// 先把所有attack数组放到一个容器数组中
var attackArrays = new[] { attack1, attack2, attack3, attack4 };

for (int i = 0; i < 4; i++)
{
    // 取出当前循环对应的attack数组
    var currentAttack = attackArrays[i];
    currentAttack[0] = attacks[i];
    currentAttack[1] = Convert.ToString(atdmg[i]);
    currentAttack[2] = ateffect[i];
    currentAttack[3] = Convert.ToString(ataccur[i]);
    currentAttack[4] = Convert.ToString(atmul[i]);
}

方法2:用自定义类封装(更推荐)

如果可以重构代码,更建议用自定义类来封装攻击的各项属性,这样代码可读性更高,也能避免数组下标出错的问题:

// 定义一个类来存储攻击的所有属性
public class AttackInfo
{
    public string Name { get; set; }
    public string Damage { get; set; }
    public string Effect { get; set; }
    public string Accuracy { get; set; }
    public string Multiplier { get; set; }
}

然后用列表或数组来存储这些对象,循环赋值的代码会更清晰:

var attackList = new List<AttackInfo>();
for (int i = 0; i < 4; i++)
{
    attackList.Add(new AttackInfo
    {
        Name = attacks[i],
        Damage = Convert.ToString(atdmg[i]),
        Effect = ateffect[i],
        Accuracy = Convert.ToString(ataccur[i]),
        Multiplier = Convert.ToString(atmul[i])
    });
}

后续打印信息时,直接遍历attackList即可,比如:

foreach (var attack in attackList)
{
    Console.WriteLine($"名称:{attack.Name},伤害:{attack.Damage},效果:{attack.Effect}");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:20:50