我看到在类似的编程语言(例如Haskell和Python)中给出的对该问题的类似答案,但是它们都使用Lua所没有的内置功能,因此请不要将此问题标记为重复。
假设我有两个像波纹管一样的桌子:
table1 = {A,B,C}
table2 = {D,E,F}
我想找到匹配两个表中项目的所有唯一方法,答案应该是(用非正式表示法:)>
AD,BE,CF AD,BF,CE AE,BD,CF AE,BF,CD AF,BD,CE AF,BE,CD
因此答案将存储在表中,而table [1]将为
{{A, D}, {B, E}, {C, F}}
,依此类推。表格的长度可以是任何长度,但两者的大小都相同。
我在类似的编程语言(例如Haskell和Python)中看到了对该问题的类似答案,但是它们都使用了Lua所没有的内置功能,所以请不要对此进行标记...
我们可以通过归纳获得所有改组(不是最快的方法,但是很容易编写/理解)
另一种替代方法是使用以下代码。编写该文档是为了帮助游戏(类型转换)来发现字母的可变组的所有可能组合。不过,我已对其进行了修改以适合您的示例。
function get_all_combinations(arr1, arr2)
local n, e, all_comb = #arr1, {}, {}
for j = 1, n do
e[j] = arr2[j]
end
local function generate(m)
if m == 1 then
local comb = {}
all_comb[#all_comb + 1] = comb
for j = 1, n do
comb[j] = arr1[j]..e[j]
end
else
for j = 1, m do
generate(m - 1)
local k = j < m and m % 2 == 1 and 1 or j
e[k], e[m] = e[m], e[k]
end
end
end
generate(n)
return all_comb
end
for i, v in ipairs(get_all_combinations({"A", "B", "C"}, {"D", "E", "F"})) do
print(i, table.concat(v, ";"))
end