我有3个模型/实体,A,B,C(后端为django)。
在前端,我有3个空框,需要在其中添加A,B,C实例。
A,B,C可用实例的数量可以为0到无限。
理想情况下,我应该显示A中的1个,B中的1个和C中的1个,但是有时任何实体都不能有实例。可以是无,无实例的一个或多个。
我的基本方法是使用ifs
,但效率不高,请参见伪代码中的分支之一:
if not C:
if A:
if not B:
show up to 3 of A if they are available
elif B:
if at least 2 of A:
show 2 of A and 1 Of B
if 1 of A:
show 1 of A and up to 2 of B
elif not A:
show up to 3 of B if exist
除了在所有分支上都是几十个
ifs
之外,它不会缩放,例如,如果将来我添加新的Entity和/或box。因此,我正在寻找一种可以扩展的算法。我正在使用Python,django,PostgreSQL。我提取数据,很简单:
A.objects.all().order_by('-id')[:3]
最佳答案
models = [A, B, C]
num_boxes = len(models) # but could be different
objects = [list(model.objects.all().order_by('-id')[:num_boxes])
for model in models]
boxes = []
while any(objects):
for row in objects:
if row:
boxes.append(row.pop(0))
print(sorted(
boxes[:num_boxes],
key=lambda x: models.index(type(x))
))
关于python - 元素类型组合的一种解决方案,当任何一种类型可以具有零个元素时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54455128/