gpt4 book ai didi

lua - 你如何交换 lua 表中的值?

转载 作者:行者123 更新时间:2023-12-05 05:42:19 25 4
gpt4 key购买 nike

您如何交换表中的值并将其交换为不同的值?例如:

local TestTable = {1, 2, 3, 4, 5}
local SwappedTestTable = TestTable:Swap(2, 4)
for i, v in pairs(TestTable) do
print(v)
end

-- Output = 1, 4, 3, 2, 5

这是我尝试过的方法,但失败得很惨。

local TestTable = {1, 2, 3, 4, 5}

function Swap(Table, Pos1, Pos2)
local Table = Table
local Item1 = Table[Pos1]
local Item2 = Table[Pos2]

table.remove(Table, Pos1)
table.insert(Table, Pos2, Item1)

table.remove(Table, Pos2)
table.insert(Table, Pos1, Item2)

return Table
end

for _, v in pairs(Swap(TestTable, 2, 4)) do
print(v)
end

最佳答案

This is what I've tried and it failed horrendously.

一个有趣的解决方案,但受到主要问题的困扰:

  1. 它无法处理 table.inserttable.remove 调用导致的索引移位,导致以后的 table.inserttable.remove 调用对错误的索引进行操作(虽然这可以修复)
  2. 它需要线性时间(由于上述索引偏移),这对于这样的基本操作来说是 Not Acceptable 。
  3. 它过于复杂。

How would you swap a value in a table and exchange it for a different one?

我会简单地获取这两个值并将它们设置为各自的“其他”索引,在恒定时间内交换值:

function Swap(Table, Pos1, Pos2)
local tmp = Table[Pos1]
Table[Pos1] = Table[Pos2]
Table[Pos2] = tmp
return Table
end

Lua 允许你使用“多重赋值”来写得更简洁:

function Swap(Table, Pos1, Pos2)
Table[Pos1], Table[Pos2] = Table[Pos2], Table[Pos1]
return Table
end

(此时 Swap 函数变得多余,因为它几乎不比每次都写下作业更短或更简洁)

注意事项:

  1. 如果您希望能够以 OOP 方式使用 Swap 函数 (Table:Swap(i, j)),您必须分配一个元表。 本地元表 = {__index = {Swap = Swap}}; setmetatable(Table, metatable) 将为此工作。
  2. 为什么 Swap 函数返回 Table?这仅对某些语法糖有用(链接,f.E. 与 pairs 在您的示例中)并且在区分语句和表达式的语言中可能是意想不到的。
  3. 同样,我可能不会为此使用函数(特别是考虑到要求函数所需的代码或全局命名空间污染,否则您需要使其可用),而是只需使用赋值 Table[i], Table[j] = Table[j], Table[i]
  4. 您的命名约定(我在这篇文章中坚持使用)有点令人不快; UpperCamelCase 通常用于 Lua 中的类和元表名称,而不是函数和(表)变量。

关于lua - 你如何交换 lua 表中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72068474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com