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

如何编写脚本分析整数数组相邻重复序列并生成指定元组数组?

修复相邻重复元素分组的C#代码问题

先拆解下你这段代码里的几个核心问题:

  • 元组顺序搞反了:你需要的是*(值, 首次出现位置, 重复次数)*,但原代码添加的是(subArraySize, array[subArrayStart], subArrayStart),顺序完全不符合需求
  • subArraySize的递增逻辑混乱:每次循环末尾无条件执行subArraySize++,会导致计数重复叠加,最终统计的次数完全错误
  • 最后一个元素的处理逻辑有漏洞,没有正确判断它是否属于前一个分组

下面是修正后的完整代码,完美匹配你想要的输出效果:

// 示例输入数组,你也可以替换成handStacks
int[] array = new int[] { 1, 2, 2, 3, 1, 5, 4, 4, 1, 1, 1 };
var analysis = new List<(int Value, int StartIndex, int Count)>();

// 处理空数组的边界情况,避免后续报错
if (array.Length == 0)
{
    return;
}

int subArrayStart = 0;
int subArraySize = 1;

// 从第二个元素开始遍历,对比当前元素和分组起始元素
for (int x = 1; x < array.Length; x++)
{
    int curr = array[x];
    if (curr != array[subArrayStart])
    {
        // 遇到不同元素,添加当前完成的分组
        analysis.Add( (array[subArrayStart], subArrayStart, subArraySize) );
        // 重置分组参数,开始新的分组
        subArrayStart = x;
        subArraySize = 1;
    }
    else
    {
        // 元素相同,重复次数加1
        subArraySize++;
    }
}

// 循环结束后,添加最后一组元素(循环里不会触发最后一组的添加)
analysis.Add( (array[subArrayStart], subArrayStart, subArraySize) );

// 可以用这段代码验证输出结果
foreach (var group in analysis)
{
    Console.WriteLine($"({group.Value}, {group.StartIndex}, {group.Count})");
}

核心逻辑说明:

  • 先处理空数组的边界场景,避免索引越界问题
  • 从数组第二个元素开始遍历,直接和当前分组的起始元素对比,逻辑更简洁
  • 遇到不同元素时,立即把当前分组的元组加入列表,同时重置分组的起始位置和计数
  • 循环结束后必须单独添加最后一组,因为循环内只有遇到不同元素才会触发添加操作,最后一组没有触发条件

运行这段代码后,输出结果完全符合你的预期:

[(1, 0, 1), (2, 1, 2), (3, 3, 1), (1, 4, 1), (5, 5, 1), (4, 6, 2), (1, 8, 3)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:47:42