Lua - 将字符串按字母顺序重新排列

我是Lua的新手,正在尝试弄清楚如何将字符串按字母顺序重新排列。例如,如果字符串是“APPLE”,那么我的代码应该返回“AELPP”。我该如何实现这一点?谢谢

点赞
用户7746452
用户7746452

你应该:

  1. 将字符串转换为字符表
  2. 对表进行排序
  3. 将表转换为字符串

例如:

local str = "APPLE"
local tab = {}
str:gsub(".",function(c) table.insert(tab,c) end)
table.sort(tab)
str = table.concat(tab)
print(str)
2020-06-29 11:06:56
用户4984564
用户4984564
```lua
local function sort(input)
   local buffer = {}
   for i=1,#subject do
      buffer[i] = subject:sub(i,i)
   end
   table.sort(buffer)
   return table.concat(buffer)
end

print(sort("Lorem ipsum dolor sit amet"))

这并不是最“优雅”的解决方案,但是在 Lua 5.3 上与使用 gmatchgsub 循环相比,它肯定是最快的。

gsub   用时 0.278914gmatch 用时 0.260757 秒
numfor 用时 0.228867

对于 LuaJIT 2.1,结果非常相似:

gsub   用时 0.167457gmatch 用时 0.157505 秒
numfor 用时 0.124351

基准测试细节:对长度为 4,300 个字符的字符串进行完整函数的 100 次重复调用。所有函数共享常见的排序和连接开销,因此循环结构的性能差异比数字所显示的要大。

2020-06-29 11:36:34