首页 > 解决方案 > 使用 Google 表格过滤器查找第一个不连续的数组元素

问题描述

我必须在一个(总是排序的)数组中完成这项工作,该数组是由分割一个分隔的排序整数字符串产生的。具体来说,如果我的单元格包含"1,2,3,5"我需要一个公式来评估4。一个有益的副作用是找到一个实现,如果原始数组只有连续数字,则给出最后一个数字+1,即,应用公式"1,2,3,4,5"将评估为6

我的方法是生成一个完美序列的新数组,并将其与我的原始数组进行比较,以找到两个数组不相等的第一个元素。像这样创建一个完美的数组序列:

=TRANSPOSE(SEQUENCE(COUNT(arr),1,MIN(arr),1))

所以剩下要做的就是将 arr 与上面的序列进行比较,以找到第一个不同的元素,例如:

=COUNTA(IFERROR(FILTER(arr;MATCH(arr;  transpose(sequence(count(arr),1,min(arr),1)) 
 ;0))))

可悲的是,我上面所说的并不是在数组的第一个不相等值处正确“短路”。COUNTIF 是要走的路吗?

如果我的上一步得到了元素的索引而不是值,那么剩下的就是获取该索引处的值:

INDEX( arr, 1, counta(iferror(filter(arr;match(arr1;  transpose(sequence(count(arr),1,min(arr),1)) 
 ;0)))) )

有没有更直接的方法来获得第一个非连续元素?一种不涉及电子表格中实际范围的方法?

标签: arraysgoogle-sheets-formula

解决方案


经过一番思考,我意识到从生成的序列中减去(即设置差异)原始数组总是给我第一个缺失的数字。所以我处理这个问题的最终公式以及所有数字都按顺序排列的情况是:

IFERROR(INDEX(FILTER(TRANSPOSE(SEQUENCE(COUNT(SPLIT(G7," ")),1,LEFT(G7,4),1)), ISERROR(MATCH(TRANSPOSE(SEQUENCE(COUNT(split(G7," ")),1,LEFT(G7,4),1)),SPLIT(G7, " "),False))),1,1),RIGHT(G7,4)+1) )

我确信有一个更好、更简洁的答案,但这确实有效。


推荐阅读