我有一个整数序列,我想计算序列中每个点的当前相同值序列的长度。例如,如果序列是 (0,1,1,1,0,0),我希望输出 (1,1,2,3,1,2)。
使用非数组公式可以轻松实现这一点:
B2 =100 # Length of the sequence
D2 =SEQUENCE(B2)
E2 =RANDARRAY(B2,,0,1,TRUE) # My sequence
F2 =IF(OR(D2=1,E2<>E1),1,F1+1) # Formula copied down until the end of the sequence (F101)
现在,我想在列中有一个数组公式F
,因为我事先不知道我的序列有多长。我最好的尝试是:
G2 =LET(s,E2#,SCAN(0,D2#,LAMBDA(a,x,IF(OR(x=1,INDEX(s,x)<>INDEX(s,x-1)),1,a+1))))
公式可以工作,但是速度很慢。上面的非数组公式F2
即使等于 100,000 也几乎立即起作用B2
,而数组公式在B2
等于 10,000 时就已经很吃力了。
有什么想法可以使数组公式像非数组公式一样快吗?