如何实现从右向左将值填充到固定列数的目标表列中
从右向左固定列填充的实现调整
核心逻辑差异
原有从左到右填充的实现,是按原字符串拆分的顺序,从最左侧第一列开始顺位依次填值,列满后续接下一行。要实现从最右侧贴边填充的效果,核心调整两个计算规则:
- 提前固定目标输出的总列数(本例为5列,从左到右依次为c1、c2、c3、c4、c5,列索引从左到右记为1到5)
- 逐行拆分原字符串得到有效片段列表,保持原片段顺序不打乱
- 填值起始列从最右侧的最大索引位置开始:将拆分得到的第一个片段放入最右列,第二个片段放入相邻的左侧列,以此类推,每填一个列位置就往左挪一位
- 如果填到最左列后还有剩余片段,就另起一行,依然从最右列开始继续填后续片段
效果校验示例
原输入第一行拆分得到片段[a1, b1, c1],按规则填值:
- 第一个片段
a1放入最右列c5- 第二个片段
b1放入c4- 第三个片段
c1放入c3- 剩余c1、c2列留空
最终该行列值为NULL NULL c1 b1 a1,与给出的期望输出完全匹配。
若片段长度达到6个(如a2, b2, c2, d2, e2, f2):- 第一行从c5开始填:a2→c5、b2→c4、c2→c3、d2→c2、e2→c1(占满5列)
- 剩余片段f2另起一行,从c5开始填,c5赋值为f2,其余列留空
代码层面修改点
对应原实现的核心改动:
- 替换原有填充的列偏移方向:将原来从左向右递增的列索引逻辑,改为从最右侧最大列索引开始,逐次向左递减
- 每次计算下一个填充列位置时,将列索引减1
- 当列索引小于1时,触发新行逻辑:将列索引重置为最大列数,再继续填下一个片段
- 所有未被填充到的列位置,统一赋值为NULL即可
内容的提问来源于stack exchange,提问作者Martin2000
相关产品推荐
相关产品推荐

