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

C#中使用foreach移除锯齿数组元素及子数组的问题

锯齿数组元素移除与子数组删除解决方案

核心问题拆解

  1. 原代码里用foreach遍历数组时,迭代变量是只读的,没法直接修改原锯齿数组的子数组;
  2. 数组是固定长度结构,不支持直接移除元素,必须用List<int>这类动态集合才能实现元素增删;
  3. 你之前写的list.ToList().Remove(...)只是创建了临时List对象,修改的是这个临时副本,原数组的子数组完全没变化,所以退出循环后原数组元素还在,才会执行snail.Add(list.Last())。

修正思路:改用动态嵌套集合

把原int[][]转换为List<List<int>>,这样既能修改子列表里的单个元素,也能直接删除整个子列表。

1. 子数组内元素的移除

直接操作子List的元素,添加到snail列表后立即从子List中移除,后续操作的就是修改后的子List。

2. 删除整个子数组

调用外层List<List<int>>的RemoveAt或Remove方法,就能直接删除整个子列表。

修正后的示例代码

public static int[] Snail(int[][] array)
{
    // 将固定长度的锯齿数组转为动态嵌套集合,支持增删操作
    List<List<int>> dynamicArray = array.Select(subArr => subArr.ToList()).ToList();
    List<int> snail = new List<int>();

    // 用while循环替代foreach,避免遍历中修改集合引发异常
    while (dynamicArray.Count > 0)
    {
        // 处理第一个子数组:全部元素加入snail后移除整个子数组
        if (dynamicArray.Count > 0)
        {
            List<int> firstRow = dynamicArray[0];
            snail.AddRange(firstRow);
            dynamicArray.RemoveAt(0);
        }

        // 示例:处理右侧列(从剩余子数组中逐个取最后一个元素)
        for (int i = 0; i < dynamicArray.Count; i++)
        {
            List<int> currentRow = dynamicArray[i];
            if (currentRow.Count == 0)
            {
                dynamicArray.RemoveAt(i);
                i--; // 移除后索引回退,避免跳过下一个子数组
                continue;
            }

            int lastElement = currentRow.Last();
            snail.Add(lastElement);
            currentRow.RemoveAt(currentRow.Count - 1);

            // 如果子数组为空,直接移除整个子数组
            if (currentRow.Count == 0)
            {
                dynamicArray.RemoveAt(i);
                i--;
            }
        }

        // 这里可以继续添加蜗牛排序的其他逻辑,比如底部行逆序、左侧列逆序等
    }

    return snail.ToArray();
}

关键注意事项

  • 不要在foreach中修改集合:foreach是只读迭代,遍历过程中修改集合会触发异常,改用while或for循环更安全;
  • 动态集合的引用特性:List<T>是引用类型,修改子List的元素会直接反映到外层集合中,不会像数组那样只修改临时副本;
  • 删除子数组的时机:当子List为空或者完成该子数组的所有元素处理后,直接调用dynamicArray.RemoveAt(i)就能删除整个子数组,记得调整索引避免跳过元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:05:23