二维byte数组定位指定元素及批量替换中间元素的技术求助
二维byte数组处理问题及解决方案
问题描述
处理名为byteTable的byte[,]类型二维数组,初始内容如下(括号仅为可读性标注):
00 01 E1 03 04 05 06 07 (08) 09 0A 0B 08 0D 0E 0F 10 (08) 12 13 14 15 04 17 (08) 19 {1A} 1B 1C 1D 1E 1F 20 10 (08) 23
需求如下:
- 定位数组中唯一的
0x1A元素索引; - 从
0x1A位置垂直向上查找最近的非唯一0x08元素,获取两者间距; - 将
0x1A到该0x08之间的所有元素(含0x1A、不含0x08)替换为0xFF; - 从原
0x0E所在位置开始,顺时针重复上述操作。
同时需要判断:选择从0x1A垂直方向出发,沿顺时针遍历至0x08为止,替换路径上的元素为0xFF,哪种方案更可行?
最终预期结果:
00 FF E1 03 04 05 06 FF 08 09 0A 0B 08 FF FF FF FF 08 12 FF FF 15 FF 17 08 FF FF FF FF 1D 1E 1F 20 10 08 23
解决方案与方案对比
步骤拆解(按原始需求)
- 定位
0x1A的索引:遍历数组,找到值为0x1A的元素,其索引为(4,2)(行、列索引均从0开始)。 - 垂直向上找最近的非唯一
0x08:从行号4的列2位置逐行向上检查:- 行3列2:
0x14,不是0x08; - 行2列2:
0x0E,不是0x08; - 行1列2:
0x08,即为目标元素,两者间距为4-1=3行。
- 行3列2:
- 替换元素:将行2到行4的列2元素(不含行1列2的
0x08)替换为0xFF。 - 从原
0x0E(行2列2)顺时针重复操作:按照顺时针方向遍历路径,依次找到各段的起点与对应0x08终点,替换路径内元素:- 从行2列2向左到行2列1,再向上到行0列1,直至行1列2的
0x08,替换路径元素为0xFF; - 从行2列2向右到行2列5的
0x08,替换行2列3、行2列4为0xFF; - 从行2列2向下到行4列2,再向右到行4列4,向上到行3列4,替换这些元素为
0xFF; - 从行2列2向下到行4列2,向左到行4列1,向上到行1列1,替换这些元素为
0xFF。
- 从行2列2向左到行2列1,再向上到行0列1,直至行1列2的
方案可行性对比
- 原始分步方案:逻辑直白,每一步目标明确,适合入门级实现,能精准控制替换范围,但需要多次遍历和定位,代码冗余度较高。
- 顺时针遍历替换方案:直接匹配预期结果中连续
FF的路径形态,可一次性完成多段替换,减少重复遍历次数,代码效率更高,但需要明确顺时针遍历的边界规则和方向切换逻辑,对逻辑严谨性要求更高。
结合最终预期结果的形态,顺时针遍历替换方案更可行,它能直接对应结果中的连续修改区域,避免分步操作的冗余步骤,实现效率更高。
内容的提问来源于stack exchange,提问作者maykuul
相关产品推荐
相关产品推荐

