本帖最后由 shaowu459 于 2023-9-15 09:52 编辑
横向堆叠x,操作和更新x值。
已知A-J列,每两列代表一个闭合的区间。请你排除空格以后合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
参考公式如下:
- =MID(TEXTJOIN({"],[",","},,REDUCE(-9,ROW($1:$5),LAMBDA(x,y,LET(t,INDEX(SORT(WRAPROWS(A2:J2,2)),y,),k,@t>MAX(x)+1,HSTACK(DROP(x,,k-1),IF(k,t,MAX(t,x)))))))&"]",5,99)
复制代码
公示简要说明如下:
=MID(
TEXTJOIN(
{"],[", ","}, 用[]合并REDUCE生成的字符串,合并符可以重复使用
,
REDUCE(
-9, 数据区域最小是0,初始值设定一个比较大的负数,保证第一个数据肯定堆叠进数组
ROW($1:$5), 因为有5组数据,提取5次
LAMBDA(x, y,
LET(
t, INDEX(SORT(WRAPROWS(A2:J2, 2)), y, ), 将数据按2个一行折叠,并按每组第一个数值排序。按行逐行提取
k, @t > MAX(x) + 1, 判断当前行第一个是否大于x中的最大值+1的结果
HSTACK(DROP(x, , k - 1), IF(k, t, MAX(t, x))) 如果当前行第一个大于x中最大值+1的结果,肯定是一个新组,直接横向堆叠在x右侧。如果不大于,则将当前x最右侧值更新为x最右侧值和当前行中最大的值
)
)
)
) & "]",
5,
99
)
|