首页 > 解决方案 > 找到这两组项目的所有可能组合?卢阿

问题描述

我在 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}},依此类推。
表格长度可以是任何东西,但两者的大小相同。

标签: lualua-table

解决方案


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]  -- it should be {arr1[j], e[j]} to fulfill your requirements
         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

推荐阅读