excel 使用LAMBDA作为FILTER的第二个参数

e0uiprwp  于 2023-01-14  发布在  其他
关注(0)|答案(2)|浏览(170)

在Excel中,我可以很容易地将LAMBDA作为第二个参数传递给MAP,正如预期的那样:

=MAP({1, 2, 3}, LAMBDA(x, x = 1))
// { TRUE, FALSE, FALSE }

如果我尝试对FILTER执行相同的操作,则会得到一个错误:

=FILTER({1, 2, 3}, LAMBDA(x, x = 1))
// #CALC!

我有几个相关的问题:
1.有没有什么方法可以用LAMBDA作为第二个参数呢?

  1. official documentation for FILTER没有提到参数的类型或任何限制-它只是说“基于您定义的条件”。我在哪里可以找到显式提供此类信息的Excel公式的文档(例如,“第n个参数必须是字符串”,“必须是以R1 C1格式给出的绝对引用”,“必须是-283和87845之间的数字”,“必须是单元格范围而不是数组文字”、“必须是单元格范围或数组文字但由于某种原因而不是数组单元格引用”等)
    1.如果我不能使用LAMBDA,我将如何过滤数组常量?
    1.微软是否有任何路线图来实现这些明显有用的特性,这些特性将为MAPFILTER提供任何理智的人所期望的一致的API?
    如果我听起来很咸那是因为我很咸
zrfyljdw

zrfyljdw1#

是的,你可以,但是你必须知道lambda辅助函数MAP()和实际的LAMBDA()函数之间的区别。
MAP()的语法:

=MAP(array1, lambda_or_array<#>)

Map是一个内置的lambda助手,由于它的唯一功能是在迭代计算中应用lambda,因此可以应用=MAP({1,2,3},LAMBDA(x,x=1))
根据官方文档在单元格中创建LAMBDA()的语法:

=LAMBDA([parameter1, parameter2, ...],calculation)(function call)

这里的区别是,对于实际的lambda,你仍然应该创建 * 你自己的定制函数 *。对于这个,语法有点不同,并且与内置函数如MAP()REDUCE()等形成对比;你仍然需要包含输入,这是通过函数末尾的一组附加括号实现的:十一.¹
现在我们知道,使用内置的lambda-helpers,input是函数语法中的一个实际参数,我们可以将其应用于FILTER()

=FILTER({1,2,3},MAP({1,2,3},LAMBDA(x,x=1)))

或²:

=FILTER({1,2,3},LAMBDA(x,x=1)({1,2,3})

看看MAP()函数是如何让生活变得更简单的吧?你也可以使用LAMBDA()来创建自己的自定义函数,如下面的脚注所示,并调用它:

=FILTER({1,2,3},TEST({1,2,3})

¹用户通常会在名称管理器中创建一个自定义的lamda函数。在这种情况下,您不需要在末尾包含源代码,而是在调用函数时将输入包含在第一个参数中。例如:引用=LAMBDA(x,x=1)的称为TEST()的定制命名函数在被调用=TEST({1,2,3})时将输出{TRUE,FALSE,FALSE}
²如果你确实想使用数组常量,考虑合并LET(),以便能够首先将数组放入一个命名变量中。例如:=LET(x,{1,2,3},FILTER(x,LAMBDA(y,y=1)(x))) .

rqqzpn5f

rqqzpn5f2#

回答你的第三个问题:你可以使用这个公式:

=LAMBDA(x,FILTER(x,x=2))({1,2,3})

或者-如果要保留列:

=BYCOL({1,2,3},LAMBDA(x,FILTER(x,x=2,"")))

增强第一个版本以传递filter-value:

=LAMBDA(arrValues, filterBy, FILTER(arrValues,arrValues = filterBy))({1,2,3};3)

相关问题