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

如何优化这段遍历数组的代码以使其更简洁?

优化遍历数组生成位置的代码方案

嘿,我来帮你捋捋这段代码的优化思路!从你给出的代码片段来看,核心应该是生成敌人网格左右两侧的可生成位置数组对吧?原代码里有不少重复逻辑和可以简化的地方,咱们一步步来优化:

先明确核心问题

原代码的问题在于:

  • 变量命名模糊(coordX/coordY语义不清晰,而且看起来你只用到了coordY的左右方向)
  • 重复的循环逻辑(左右两个方向的循环几乎一致,只有x坐标不同)
  • 冗余的条件判断(两次判断方向来执行不同的循环赋值)

优化方案1:用LINQ简化数组生成(推荐)

如果你的项目允许使用LINQ(Unity里默认支持,只需引入命名空间),可以用一行代码替代手动循环,同时去掉条件分支:

using System.Linq; // 记得引入这个命名空间

void GetSpawnablePosition()
{
    // 直接绑定方向与对应的x坐标,避免后续条件判断
    var sideSpawnSettings = new[] 
    { 
        (Direction: Vector2.left, SpawnX: 0), 
        (Direction: Vector2.right, SpawnX: enemyGrid.grid.Length - 1) 
    };

    foreach (var setting in sideSpawnSettings)
    {
        // 用LINQ直接生成位置数组,替代手动for循环
        var spawnPositions = Enumerable.Range(1, enemyGrid.grid[0].Length - 2)
                                      .Select(y => new Vector2(setting.SpawnX, y))
                                      .ToArray();

        // 这里添加你对spawnPositions的后续处理逻辑,比如原代码里的操作
    }
}

优化点说明

  • 语义化命名:把模糊的coordY改成sideSpawnSettings,同时用元组把方向和对应的x坐标绑定,逻辑一目了然
  • 消除重复代码:左右方向的生成逻辑合并成一个循环,通过元组的不同参数区分
  • LINQ简化数组生成:Enumerable.Range生成y的取值范围,Select直接转换成Vector2,省去手动初始化数组和循环赋值的代码
  • 去掉条件判断:不再需要判断方向,直接从元组取对应的x坐标,代码更简洁

优化方案2:不使用LINQ的简化版本

如果项目禁用LINQ或者你不想引入额外命名空间,可以用字典映射方向与x坐标,简化循环:

void GetSpawnablePosition()
{
    // 用字典存储方向与对应x坐标的映射
    var directionToX = new Dictionary<Vector2, int>
    {
        { Vector2.left, 0 },
        { Vector2.right, enemyGrid.grid.Length - 1 }
    };

    foreach (var directionPair in directionToX)
    {
        int xPos = directionPair.Value;
        int positionCount = enemyGrid.grid[0].Length - 2;
        Vector2[] spawnPositions = new Vector2[positionCount];
        
        for (int j = 0; j < positionCount; j++)
        {
            spawnPositions[j] = new Vector2(xPos, j + 1);
        }

        // 后续处理逻辑
    }
}

额外小建议

如果coordX(上下方向数组)后续代码里用不到,建议直接删除,避免冗余变量,让代码更干净。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:39:57