【发布时间】:2014-02-03 08:50:53
【问题描述】:
我有一个包含大量元素的数组,并希望以尽可能多的方式对它们进行分组,使每个组成为一个新数组中的一个元素。但是,某些元素是不兼容的,例如:
objects = {a, b, c, d}
incompatible = {{a,b}, {a,d}, {c,d}}
我想生成一个数组,其中包含所有兼容的对象排列,没有重复。这个数组的一个元素可以包含任意数量的对象,甚至是单例,只要它的内容都是兼容的。
在上面的例子中,它看起来像这样:
compatible_groups = {{},{a},{b},{c},{d},{a,c},{b,c},{b,d}}
我考虑的一个可能的解决方案是一个函数,它接受任意数量的参数,将它们全部相互比较,例如:
function generate_groups(...)
local arg={...}
for i=1, #arg-(n+0) do -- only looping partially through array to prevent repeats
for j=i+1, #arg-(n+1) do
for k=j+1, #arg-(n+2) do
...
但要让它工作,我需要有与函数有参数一样多的嵌套 for 循环。不知道该怎么做。
一旦解决了,检查两个参数是否构成不兼容数组的元素之一将是相当简单的。
for i=1, #incompatible
if arg[a][1] == incompatible[a][1] and arg[a][2] == incompatible[a][2]...
所以我认为无论如何。我在这里缺少一种更简单的方法吗?
【问题讨论】:
标签: arrays function lua lua-table