标签: lua-table

使用 Lua 表作为二维数组

我是一个 Lua 初学者,我尝试使用 Love2D 库在 Lua 中创建一些东西。

在加载函数中,我创建一个表并上传其元素(数字),以便稍后将其用作多维数组。

function love.load()

    Maximum_X = 32      
    Maximum_Y = 16

    Start_X = 64
    Start_Y = 32

    MapTable = {}                           -- empty table

    for i=1,Maximum_X*Maximum_Y do          -- uploading table
        table.insert(MapTable, 2)
  end


end
Run Code Online (Sandbox Code Playgroud)

然后我创建一个函数来接受表中的更改。因为我只是在试验表格,所以只有一个值发生了变化。至少,我想。

function KatamoriGen()

    MapTable[4] = 3     

end


function love.update(dt)

KatamoriGen()

end
Run Code Online (Sandbox Code Playgroud)

之后,我以 32 列 16 行的矩阵形式打印表格的元素。我在这里看到,不仅第一行的第四个元素发生了变化,而且第二行的第二个元素和第四行的第一个元素也变成了3。

显然这意味着这两者Table[posX*posY]都不起作用,因为乘法的结果是一个类似的数字4,并且该操作会更改其中的每个元素

X coordinate + Y coordinate = posX*posY

是真的。在示例代码中,该等式的右边是 4。

一个小问题:为什么会发生这种情况?

主要问题是:如何MapTable准确识别元素?如何为 Lua 表实现 X 和 Y 维度?将它们用作二维数组?也许是一桌一桌?

编辑:这是绘图功能:

function …
Run Code Online (Sandbox Code Playgroud)

arrays lua love2d lua-table

3
推荐指数
1
解决办法
7662
查看次数

在 Lua 中使用“对象”函数?

我希望能够在 Lua 中拥有具有某些函数的“对象”,这些函数引用它们自己(我不知道该怎么称呼它)。我已经看过我想要做的事情的代码,但我从来没有理解它的实际含义。我尝试过浏览 Lua 网站,但没有成功。

基本代码:

table = {}

function newTable(...)
  ...
  return setmetatable(table)
end

function table:funcName(...)
  ...
end
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下这里发生了什么以及我如何使用它吗?谢谢阅读!

lua metatable lua-table

3
推荐指数
1
解决办法
4804
查看次数

如何在lua中对表进行排序?

我有一个 lua 表,其中包含 2 个关键数据。我想按“num1”列对表进行升序排序,或者如果不可能,则按键值升序排序

这是我到目前为止所拥有的:

local widgets = {}
widgets[1568] = {}
widgets[1568]["num1"] = 99999
widgets[1568]["val2"] = "NA"
widgets[246] = {}
widgets[246]["num1"] = 90885
widgets[246]["val2"] = "NA"
widgets[250] = {}
widgets[250]["num1"] = 95689
widgets[250]["val2"] = "NA"
widgets[251] = {}
widgets[251]["num1"] = 95326
widgets[251]["val2"] = "NA"
widgets[252] = {}
widgets[252]["num1"] = 95301
widgets[252]["val2"] = "NA"
widgets[256] = {}
widgets[256]["num1"] = 95303
widgets[256]["val2"] = "NA"

-- ATTEMPT TO SORT
--table.sort(widgets, function(a,b) return tonumber(a.num1.value) < tonumber(b.num1.value) end)
--table.sort(widgets, function(a,b) return tonumber(a.num1) < …
Run Code Online (Sandbox Code Playgroud)

sorting lua lua-table

3
推荐指数
1
解决办法
2万
查看次数

如何从数组中删除所有“nil”值?

我有一个对象数组(或只是数字),还有另一个数组,其中包含在任何情况下都不应从第一个数组中删除的所有对象。它看起来像这样:

-- Array of objects (just numbers for now)
Objects = {}

-- Array of objects that should always stay in the 'Objects' array
DontDestroyThese = {}

-- Populate the arrays
Objects[#Objects+1] = 1
Objects[#Objects+1] = 2
Objects[#Objects+1] = 3
Objects[#Objects+1] = 4
Objects[#Objects+1] = 5

DontDestroyThese[#DontDestroyThese+1] = 2
DontDestroyThese[#DontDestroyThese+1] = 5
Run Code Online (Sandbox Code Playgroud)

现在,我有一个名为的方法,destroy()该方法应该从数组中删除除Objects数组中包含的对象之外的所有对象DontDestroyThese。该方法看起来像这样:

function destroy()
    for I = 1, #Objects do
        if(DontDestroyThese[Objects[I]] ~= nil) then
            print("Skipping " .. Objects[I])
        else
            Objects[I] = nil
        end …
Run Code Online (Sandbox Code Playgroud)

arrays null lua lua-table

3
推荐指数
2
解决办法
5669
查看次数

是什么让 Lua 表的键顺序不确定?

我知道,在 Lua 中,表键不按创建顺序保存。到目前为止,我认为这是由于内部实现可能会不断重新排列树节点以提高性能。但是,我不明白为什么以下代码片段不会转储相同的结果,即使它是在独立运行中执行的(例如,lua每次运行都运行解释器):

-- Example script
local t = {a = 1, b = 2}
for k,v in pairs(t) do
  print(k,v)
end
Run Code Online (Sandbox Code Playgroud)

有时上面的代码会转储:

a   1
b   2
Run Code Online (Sandbox Code Playgroud)

或者:

b   2
a   1
Run Code Online (Sandbox Code Playgroud)

为什么用这么少的行(其中决定论似乎很明显),解释器会转储不同的结果?是什么让这里的键顺序随机?顺序是在表创建时还是表迭代时随机的?

谢谢你!

lua lua-table

3
推荐指数
1
解决办法
418
查看次数

如何从 lua 中的关键位置开始迭代表?

我正在尝试迭代表,但使用键从表中的位置开始。

list = {
  "one",
  "two",
  "four",
  "five",
  "six"
}

for k = 3, v in pairs(list) do
  print("Key:" .. k .. " " .. "Value:" .. v)
end
Run Code Online (Sandbox Code Playgroud)

Compilation error on line 10: ...\ZeroBraneStudio\myprograms\untitled.lua:10: 'do' expected near 'in'

lua loops lua-table

3
推荐指数
1
解决办法
53
查看次数

用lua对嵌套表进行排序

我有以下表格:

{
  STANDBY = {
    timeout = "10",
    mode = "0"
  },
  RTP = {
    minport = "10000",
    maxport = "10010"
  }
}
Run Code Online (Sandbox Code Playgroud)

我想按字母顺序对它进行排序,因此生成的表应该是这样的:

{
  RTP = {
    maxport = "10010",
    minport = "10000"
  },
  STANDBY = {
    mode = "0",
    timeout = "10"
  },
}
Run Code Online (Sandbox Code Playgroud)

你能帮我么?

sorting lua lua-table

2
推荐指数
1
解决办法
405
查看次数

从列表末尾获取第n个元素(表)

如果我有一个列表(表):

local list = {'foo', 'bar', 'baz', 'qux'}
Run Code Online (Sandbox Code Playgroud)

如何从末尾得到第n个项目?(例如,倒数第二个或倒数第二个)

arrays lua list lua-5.2 lua-table

2
推荐指数
1
解决办法
4376
查看次数

有没有办法告诉`next`从特定键开始?

我的理解是pairs(t)简单回归next, t, nil.

如果我将其更改为next, t, someKey(someKey我的表中的有效密钥在哪里)将从next该密钥开始/之后?

我在Lua Demo页面上试过这个:

t = { foo = "foo", bar = "bar", goo = "goo" }

for k,v in next, t, t.bar do
  print(k);
end
Run Code Online (Sandbox Code Playgroud)

每次运行代码时都会得到不同的结果.因此,指定一个起始键有效,遗憾的是效果似乎有点随机.有什么建议?

lua iterator next lua-table

2
推荐指数
1
解决办法
439
查看次数

想要删除Lua中parantheses中字符串之间的空格

我试图删除parantheses中的字符串之间的空格.但是它给出了函数的地址.

str = "1791 (AR6K Async) S 2 0 0 0 -1 2129984 0 0 0 0 0 113 0 0 20 0 1 0 2370 0 0 4294967295 0 0 0 0 0 0 0 2147483647 0 3221520956 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0"

local word = str:gmatch("%(%S+)%" , "")
print(word)
Run Code Online (Sandbox Code Playgroud)

在上面这个字符串中,我只想要除了paranthesis空间以外的所有东西.我试图得到像下面的输出没有任何空格的paranthesis.

"1791 (AR6KAsync) S 2 0 0 0 -1 2129984 0 0 0 0 0 113 0 …
Run Code Online (Sandbox Code Playgroud)

string lua lua-table

2
推荐指数
1
解决办法
343
查看次数

标签 统计

lua ×10

lua-table ×10

arrays ×3

sorting ×2

iterator ×1

list ×1

loops ×1

love2d ×1

lua-5.2 ×1

metatable ×1

next ×1

null ×1

string ×1