在(N行x M列)数组中的每一行中,对标量值进行匹配,以产生发生匹配的列位置的(N行x 1列)列表(即在1和M之间)
我需要找到每一行中第一个出现的0,并生成一个列表,例如。
2 0
4 0
6 0
8 0
10 0
0 0
它应该产生
2
2
2
2
2
1
并用于:
250 250 0
500 0 0
750 250 0
0 0 0
它应该产生
3
2
3
1
因为我需要将其 Package 到LAMBDA
中,所以我不能使用ROW()
,因为它引用当前工作表中的位置,并且我也不能使用辅助列/行。
这是一个更大的问题中的一个小问题,我被卡住了。如果你认为这是一个X-Y问题,并且有更好的方法来解决更大的问题,那么就会提供上下文。话虽如此,能够解决这个特定的问题(我使用MATCH
)将是有用的,因为它可能可以推广到MAX
,MIN
,SUM
等。
上下文
我想做的是,根据需要,在一个公式中,基于2
的“步长”,{12,2}
的选项和12
的max生成一个序列。
2
2
2
2
2
12
它需要推广到其他输入,例如{1000,500,250}
,max是1000
,step是250
的选项:
250
500
250
1000
旁注:每个选项都可以被精确地整除为较小的选项,即250可以被250整除,500可以被500和250整除,1000可以被1000和500和250整除,并且目的是获取该集合中的最大值。
(我可以很容易地将其 Package 成LAMBDA
)
探索
现在我可以很容易地生成一个数组,如使用SEQUENCE(1000/250,,250,250)
。
250
500
750
1000
或使用SEQUENCE(12/2,,2,2)
2
4
6
8
10
12
我知道MOD(this, option) == 0
with
SWITCH(0,
MOD(this,12),12,
MOD(this,2),2
)
2 => 2
4 => 2
6 => 2
8 => 2
10 => 2
12 => 12
或
with
SWITCH(0,
MOD(this,1000),1000,
MOD(this,500),500,
MOD(this,250),250,
)
250 => 250
500 => 500
750 => 250
1000 => 1000
创意
我的想法是生成一个动态的二维数组,其中每个生成的数字都有一行,每个选项都有一列,并对它们进行mod,例如,使用MOD(SEQUENCE(12/2,,2,2),{12,2})
:
2 0
4 0
6 0
8 0
10 0
0 0
或使用MOD(SEQUENCE(1000/250,,250,250),{1000,500,250})
250 250 0
500 0 0
750 250 0
0 0 0
倒数第二步,我必须做的是获取每行第一列0
的位置,并使用INDEX(options, position)
获取实际选项。
最后一步是采取这些位置,并使用INDEX({12,2},{2,2,2,2,2,1})
或INDEX({1000,500,250},{3,2,3,1})
查看原始选项(技术上它们是水平的,但我可以TRANSPOSE
)
卡住了
我在倒数第二步卡住了。我如何获得每行中第一个0值的列位置?
我尝试使用MATCH
,但它不做我想要的;它似乎只产生一个值。
倒数第二步的公式应该会得到一个6x 1的数组,这样我就可以在最后一步中使用它:
2 // position 2 of {12,2} == 2
2 // position 2 of {12,2} == 2
2 // position 2 of {12,2} == 2
2 // position 2 of {12,2} == 2
2 // position 2 of {12,2} == 2
1 // position 1 of {12,2} == 12
或
3 // position 3 of {1000,500,250} == 250
2 // position 2 of {1000,500,250} == 500
3 // position 3 of {1000,500,250} == 250
1 // position 1 of {1000,500,250} == 1000
1条答案
按热度按时间efzxgjgh1#
试试看:
似乎返回您想要的结果
或者甚至: