假设我将一个字符串插入表中,如下所示:
table.insert(tbl, mystring)
Run Code Online (Sandbox Code Playgroud)
这mystring是通过将所有出现的"a"替换为"b"而生成的input:
mystring = string.gsub(input, "a", "b")
Run Code Online (Sandbox Code Playgroud)
将两者合并为一个语句的明显方法不起作用,因为gsub返回两个结果:
table.insert(tbl, string.gsub(input, "a", "b")) -- error!
-- (second result of gsub is passed into table.insert)
Run Code Online (Sandbox Code Playgroud)
我想,这是为支持多种回报价而支付的价格.问题是,是否有一种标准的内置方式来选择第一个返回值?当我发现select我认为这正是它所做的,但是唉,它实际上从N开始选择所有结果,因此在这种情况下没有帮助.
现在我知道我可以自己定义select如下:
function select1(n, ...)
return arg[n]
end
table.insert(tbl, select1(1, string.gsub(input, "a", "b")))
Run Code Online (Sandbox Code Playgroud)
但这看起来并不正确,因为我希望有一种内置的方式来做到这一点.
那么,我错过了一些内置构造吗?如果没有,Lua开发人员是否倾向于使用单独的变量来提取正确的参数或编写自己的select1函数?
这是我到目前为止的...它创建了一个名为"mod"的全局表,但我似乎无法在表中添加索引...
lua_newtable(L);
lua_setglobal(L,"mod");
Run Code Online (Sandbox Code Playgroud) 当编写一个将表推入堆栈的C函数作为Lua调用者的返回值时,它应该在C上下文中返回什么?我知道你应该返回你传递回Lua调用者的值的数量,但是对于表来说,表引用是1,还是需要考虑表的内容?
回路过我使用中示出的表的方法," 推一个Lua表. "
这可能是一个奇怪的问题,但是当我填满一个包含1400万件物品的桌子后,当我最终收到内存错误时,好奇心得到了最好.
是否存在Lua表的一种设置内存限制,还是有点动态?我认为Lua本身一般会分配如此多的内存,并且当它耗尽时会抛出错误,但这只是一个疯狂的猜测.有人知道吗?谢谢.
我已经在这里找到了尽可能多的答案,因为我可以找到我认为足够接近我的问题的标题.我没有看到任何人有我的确切问题,所以我问一个问题,我希望只是我对一个简单的事实一无所知.
我正在尝试编写一个记录HP(int)和距离(boolean)的表,然后按HP排序,只有顶部附近的Range中的那些.
local tableTest = {
{hp = 64, range = true, name="Frank"},
{hp = 100, range = true, name="Joe"},
{hp = 2, range = false, name="Jim"},
{hp = 76, range = true, name="Tim"},
{hp = 17, range = false, name="Jill"},
{hp = 16, range = true, name="Phillip"},
}
-- Sort by HP and Range to find lowest Unit in Range.
table.sort(tableTest, function(x,y) return x.hp < y.hp and x.range end)
for i=1, #tableTest do print(tableTest[i].name, tableTest[i].hp) end
Run Code Online (Sandbox Code Playgroud)
这个输出是:
Phillip 16 …Run Code Online (Sandbox Code Playgroud) 我有下面的程序代码,试图对给定的列表进行排序.我尝试了各种选项,但仍然无法正常工作.
local List = {}
List[143] = "143"
List[145] = "145"
List[120] = "120"
List[178] = "178"
table.sort(List, compare)
Run Code Online (Sandbox Code Playgroud)
比较功能定义为
function compare(a, b)
if tonumber(a) < tonumber(b) then
return true
end
end
Run Code Online (Sandbox Code Playgroud)
以上table.sort不适用于任何订单.我只想将它排序为增加数字顺序.如果您对此有任何想法,请帮助我.提前致谢
我想按字母顺序排序表.除了数字.
下面的代码显示了如何使用比较器函数对表进行排序:
function( a,b ) return a.N < b.N end
Run Code Online (Sandbox Code Playgroud)
给我:
obj = {
[1] = {
["N"] = "Green 1";
};
[2] = {
["N"] = "Green 11";
};
[3] = {
["N"] = "Green 2";
};
[4] = {
["N"] = "Red 1";
};
}
Run Code Online (Sandbox Code Playgroud)
但是我希望它像这样排序:
obj = {
[1] = {
["N"] = "Green 1";
};
[2] = {
["N"] = "Green 2";
};
[3] = {
["N"] = "Green 11";
};
[4] = {
["N"] = …Run Code Online (Sandbox Code Playgroud) 我碰到了像这样的桌子,键周围有方括号。我知道使用lua不需要使用lua ..使用方括号时有什么区别吗?
local commands_json =
{
["request"] = {
["application"] = PW_APPLICATION,
["push_token"] = deviceToken,
["language"] = "en", --OR: system.getPreference( "ui", "language" ),
["hwid"] = system.getInfo("deviceID"),
["timezone"] = -3600, --offset in seconds
["device_type"] = deviceType
}
}
Run Code Online (Sandbox Code Playgroud) 抱歉,我仍在学习lua。您能纠正我吗,为什么文件中的数据无法逐行读取?
这是我在points.txt文件中的示例数据:
lexxo:30:1
rey:40:2
lion:40:2
prince:50:3
royal:50:3
Run Code Online (Sandbox Code Playgroud)
所以当我从上面得到的是二维数组(表)
player = {{(name),(points),(which var point earned on index)},
{(...),(...),(...)}};
Run Code Online (Sandbox Code Playgroud)
所以问题是,当我尝试循环打印文件中的所有数据时。它只打印最后一行。所以我想要打印所有的
line_points = {}
player_data = {{}}
local rfile = io.open("points.txt", "r")
for line in rfile:lines() do
playername, playerpoint, playeridpoint = line:match("^(.-):(%d+):(%d+)$")
player_data = {{playername, playerpoint, playeridpoint}}
line_points[#line_points + 1] = player_data
end
for i = 1, #player_data do
player_checkname = player_data[i][1] -- Get Player Name From Array for checking further
player_checkpnt = player_data[i][3] -- Get Player ID Point From Array …Run Code Online (Sandbox Code Playgroud) 我想在Lua中使用一次写入表(特别是LuaJIT 2.0.3),这样:
local tbl = write_once_tbl()
tbl["a"] = 'foo'
tbl["b"] = 'bar'
tbl["a"] = 'baz' -- asserts false
Run Code Online (Sandbox Code Playgroud)
理想情况下,这将像常规表(pairs()和ipairs()工作)一样运行.
__newindex基本上与我想要实现它的方法相反,我不知道任何使用pair()和ipairs()使代理表模式工作的技术.