我是一个 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) 我希望能够在 Lua 中拥有具有某些函数的“对象”,这些函数引用它们自己(我不知道该怎么称呼它)。我已经看过我想要做的事情的代码,但我从来没有理解它的实际含义。我尝试过浏览 Lua 网站,但没有成功。
基本代码:
table = {}
function newTable(...)
...
return setmetatable(table)
end
function table:funcName(...)
...
end
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下这里发生了什么以及我如何使用它吗?谢谢阅读!
我有一个 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) 我有一个对象数组(或只是数字),还有另一个数组,其中包含在任何情况下都不应从第一个数组中删除的所有对象。它看起来像这样:
-- 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) 我知道,在 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)
为什么用这么少的行(其中决定论似乎很明显),解释器会转储不同的结果?是什么让这里的键顺序随机?顺序是在表创建时还是表迭代时随机的?
谢谢你!
我正在尝试迭代表,但使用键从表中的位置开始。
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'
我有以下表格:
{
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)
你能帮我么?
如果我有一个列表(表):
local list = {'foo', 'bar', 'baz', 'qux'}
Run Code Online (Sandbox Code Playgroud)
如何从末尾得到第n个项目?(例如,倒数第二个或倒数第二个)
我的理解是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)
每次运行代码时都会得到不同的结果.因此,指定一个起始键有效,遗憾的是效果似乎有点随机.有什么建议?
我试图删除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)