基本上,假设我在列范围内有一个属于三种类型对象的1000个元素的列表(如果它也可以与三种以上类型一起使用,那就更好了)。每种类型都有关联的概率。我想对此输入列范围进行排序,以便每个元素根据其类型随机选择,同时在输入列中使用此类型的原始相对顺序,并且每当使用类型的所有元素时,我们都会执行相同的操作忽略了二手类型的项目。 因此,如果只有两种类型,鸟类的概率为0.000001,昆虫的概率为0.999999,那么我们希望找到与顶部原始清单相同的顺序找到所有昆虫,而鸟类的鸟类在底部的鸟类。同样的订单也是 我不确定这种排序是否有名称。最初,我的想法是使用经过修改的随机分类,但是我无法保留每种类型的原始顺序。 然后,我已经编写了使用countif的工作解决方案,以了解到目前为止选择了当前类型的多少个项目,然后是一个间接公式,以了解要查看哪个单元格值。 可悲的是,它非常慢(大约20秒...),这是一个很大的否,因为我需要它以合理的速度与2000年的物品合理地工作。 有人可以帮助我提供更有效的解决方案吗?
在您的测试表中添加了一种方法(单独的选项卡);一定要大量测试它,以查看它是否坚持各种场景和所有方案...
=let(Ξ,tocol(map(torow(E3:E5),lambda(Σ,map(K3:K27,lambda(Λ,let(Δ,lambda(x,index(xlookup(x,G3:G5,E3:E5,,-1))),if(Δ(Λ)=Σ,chooserows(filter(B:B,C:C=Σ),countif(Δ(K3:Λ),Δ(Λ))),)))))),3),
vstack(Ξ,filter(B3:B27,isna(xmatch(B3:B27,Ξ)))))