返回

探秘Excel函数式编程:精妙求取右括号位置

Excel技巧

踏上函数式编程之旅

Microsoft 365中新添的众多函数为我们开启了函数式编程的大门,让我们能够用工作表函数模拟其他编程语言中常用的数据或数组操作技巧,从而拓展工作表函数解决问题的新思路。

初识“栈”

在计算机科学中,“栈”是一种先进先出的数据结构,其遵循“后进先出”的原则,即最后添加的数据项(新数据)会被优先移除。在日常生活中,栈结构的应用随处可见,比如一摞书、一叠盘子或是一串钥匙,都是栈结构的典型代表。

模拟“栈”结构

在Excel中,我们可以使用INDEX函数和SEARCH函数巧妙地模拟“栈”结构。INDEX函数负责检索指定单元格中的值,而SEARCH函数则用于查找子字符串在指定文本串中的位置。通过将这两者巧妙结合,我们便能实现“栈”的基本操作,即后进先出。

寻找括号匹配位置

现在,让我们将目光投向一个常见的需求——寻找第n个左括号对应的右括号位置。这个问题看似简单,但若想实现自动化处理,就需要借助一些技巧。

函数式编程解决方案

基于模拟“栈”的思路,我们只需遵循以下步骤即可:

  1. 从左到右逐一扫描括号字符串,遇到左括号时,将其压入“栈”中(即将其位置记录下来);
  2. 遇到右括号时,将“栈”顶的左括号位置弹出并与当前右括号的位置进行比较,若匹配成功,则找到了对应的右括号位置;
  3. 重复步骤1和2,直到扫描完整个括号字符串或找到第n个左括号对应的右括号位置。

公式实现

=LET(
    // 将括号字符串拆分为数组
    strArr, TEXTSPLIT(A2, "(", REPETITION(1, LEN(A2))),
    // 定义一个空数组来存储左括号位置
    stack, {},
    // 遍历括号数组
    FOR EACH, strArr,
    // 若遇到左括号,则将当前位置压入栈中
    IF(strArr="(", stack, {stack, ROW()-1}),
    // 若遇到右括号,则将栈顶的左括号位置弹出并进行比较
    IF(strArr=")", stack, {LET(
        // 获取栈顶位置
        top, INDEX(stack, ROWS(stack)),
        // 比较当前位置与栈顶位置
        IF(top=n, ROW()-1, stack)
    )})
)

结语

通过函数式编程的巧妙应用,我们成功地实现了在Excel中寻找括号匹配位置的自动化处理。这种方法不仅扩展了工作表函数的应用范围,也为解决更复杂的数据处理问题提供了新的思路。希望这篇文章能激发你的灵感,带领你踏上Excel函数式编程的奇妙旅程。