感觉用这个的不多啊
简单讲一下,名字是我起的
拉面法的原理就是excel数组的拓展性,你有一个1*n的纵向数列,和一个m*1的横向数列进行运算,结果会拓展为m*n的大数组,而tocol函数可以把一个数组拉成一列。那么如果我们反复进行这两个操作,就是拓展、拉直、拓展、拉直,数组就会变得越来越大,就像拉面一样,反复对折、拉长、再对折、再拉长,就把面做出来了。而实现这个反复操作的函数就是reduce函数,它每次都会把上一次的结果代入下一次的计算,也就是迭代运算。这种方法在写法简洁的同时可以迅速的让数组大小呈指数增长,比起逐行reduce+vstack大大节约算力。
比如这个问题:
小明准备自己装一台电脑,他在表格里列出了一些正在考虑购买的部件,并查到了它们的价格。现在需要列出这些部件所有的排列组合情况,并列出每种方案的总价格。
=REDUCE(A1:A2,B1:D1,LAMBDA(s,n,TOCOL(s&","&TOROW(OFFSET(n,,,9),3))))
=REDUCE(0,A1:D1,LAMBDA(s,n,TOCOL(s+VLOOKUP(TOROW(OFFSET(n,,,9),3),F2:G13,2,))))


拉面法的原理就是excel数组的拓展性,你有一个1*n的纵向数列,和一个m*1的横向数列进行运算,结果会拓展为m*n的大数组,而tocol函数可以把一个数组拉成一列。那么如果我们反复进行这两个操作,就是拓展、拉直、拓展、拉直,数组就会变得越来越大,就像拉面一样,反复对折、拉长、再对折、再拉长,就把面做出来了。而实现这个反复操作的函数就是reduce函数,它每次都会把上一次的结果代入下一次的计算,也就是迭代运算。这种方法在写法简洁的同时可以迅速的让数组大小呈指数增长,比起逐行reduce+vstack大大节约算力。
比如这个问题:
小明准备自己装一台电脑,他在表格里列出了一些正在考虑购买的部件,并查到了它们的价格。现在需要列出这些部件所有的排列组合情况,并列出每种方案的总价格。
=REDUCE(A1:A2,B1:D1,LAMBDA(s,n,TOCOL(s&","&TOROW(OFFSET(n,,,9),3))))
=REDUCE(0,A1:D1,LAMBDA(s,n,TOCOL(s+VLOOKUP(TOROW(OFFSET(n,,,9),3),F2:G13,2,))))
