生成一个包含所有可能的替换的列表

我不知道如何给这个问题一个恰当的标题,但我试图实现的是:

一个函数,它接受一个字符串并返回一个列表,其中包含将该字符串中的!替换为Any的所有可能组合。

例如:

gen_combinations('(test ! with !)')
=> {
    '(test ! with !)',
    '(test Any with !)',
    '(test Any with Any)',
    '(test ! with Any)'
}
点赞
用户6834680
用户6834680
## 生成组合函数 `gen_combinations`

```lua
function gen_combinations(str)
   local res = {}       -- 存储结果的数组
   local count = 1      -- 枚举所有可能性的计数器
   str:gsub("!",        -- 遍历所有 "!" 字符
      function()
         count = count * 2  -- 每出现一次 "!",可能性加倍
      end
   )
   for mask = 0, count - 1 do  -- 通过二进制掩码枚举所有可能性
      table.insert(res, (str:gsub("!",  -- 替换原始字符串中的 "!" 字符
         function()
            mask = math.floor(mask) / 2  -- 用掩码来确定当前位置是否是 "Any"
            if mask % 1 ~= 0 then
               return "Any"
            end
         end
      )))
   end
   return res  -- 返回所有可能性的数组
end

函数 gen_combinations 的目的是,给定一个带有 "!" 的字符串,生成所有去掉 "!" 的字符串,其中 "!" 表示我们可能用 "Any" 替换原来的字符,从而扩展了可能性。函数使用二进制掩码来枚举所有可能性,然后生成相应的字符串数组,并将其返回。

2018-05-31 07:18:28