我无法处理函数返回的表。有人可以帮助我吗?
local grades = { Mary = "100", Teacher="100",'4','6'}
print "Printing grades!"
grades.joe = "10"
grades_copy = grades
for k, v in ipairs(grades) do
-- print "Grade:"
-- print(k, v)
end
function returntable()
tablein = grades
return 'hello'
end
grades_copy_table = returntable
--print(grades_copy_table)
Run Code Online (Sandbox Code Playgroud)
在上面的程序中,我想通过返回表的函数“returntable”访问表元素。
我正在用 Lua 编程,到目前为止我已经有了这个。
S=tostring(M[i].AllSegmentsList) --it returns "MSH, PID"
for i in string.gmatch(S, ",") do --I have ", " as delimiter
t= {} --Now, I want the values returned by delimiter to be added into an array.
end
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点。
我有两张表,例如:
table1 = { element1, element2, element3, element4 }
table2 = { element1, element3 }
Run Code Online (Sandbox Code Playgroud)
表2引用了表1的一些元素,但我不知道到底是哪一个,也不知道它们的索引。现在,对于特定元素,我想检查 table2 是否包含它,并将其插入/删除。
我首先想到的是:
table.remove/insert(table2, table1.elementX)
Run Code Online (Sandbox Code Playgroud)
但是由于插入/删除是通过索引进行查找的,所以这是行不通的。当然,我可以遍历整个表,直到找到该元素并将其删除,直到迭代完成但没有匹配为止并插入它。
但是有没有更高效的方法来做到这一点?
我不想用空字段填充 table2 以将元素放在匹配的索引上。
例:
table1 = {2,3,1}
table2 = {a,b,c}
Run Code Online (Sandbox Code Playgroud)
至
table1 = {1,2,3}
table2 = {c,a,b}
Run Code Online (Sandbox Code Playgroud) 如何从C-API创建Lua表,如下所示:
TableName = {a, b, c}
Run Code Online (Sandbox Code Playgroud)
如何设置表名?我只知道如何创建表和put值,但不知道如何设置表的名称.
创建没有名称的表的代码:
lua_createtable(L, 0, 3);
lua_pushnumber(L, 1);
lua_setfield(L, -2, "a");
lua_pushnumber(L, 2);
lua_setfield(L, -2, "b");
lua_pushnumber(L, 3);
lua_setfield(L, -2, "c");
Run Code Online (Sandbox Code Playgroud) 我的目标是拥有一个插件/解析器,可以解析基于 protobuf (UDP) 的协议。
我在网上找到了一个用于协议缓冲区消息的自动生成 Wireshark/Ethereal 解剖器插件:https : //code.google.com/archive/p/protobuf-wireshark/
当我按照自述文件我跳过“第 1步:安装Wireshark from source”,因为我已经安装了它(版本 1.12.3)。
第 2 步:准备协议缓冲区-
这一步我不明白,我如何安装libprotobuf以及在哪里?
第 3 步:更新wireshark 配置文件-
我不确定什么是“wireshark_src_dir”
我创建了一个带有wireshark.conf文件:
wireshark_src_dir :C:\ Program Files文件(x86)的\ Wireshark的
wireshark_install_dir:C:\ Program Files文件(x86)的\ Wireshark的
wireshark_version :1.12.3
第 4 步:运行 make_wireshark_plugin.py - 对于这一步,我下载并安装了 python-3.6.0-amd64.exe。
当我运行它时,我得到一个错误:回溯(最近一次调用最后一次):文件“C:\ProtoBuff\protobuff\make_wireshark_plugin.py”,第 91 行,在 f=open("configure.in","r") FileNotFoundError: [Errno 2] 没有这样的文件或目录:'configure.in'。
这个文件在我从 github 下载的包中确实不存在。我从哪里得到这个文件?我需要创建这样的吗?这个 make_wireshark_plugin.py 生成什么?
第 5 步:创建 proto 配置文件- 所有 proto 配置文件都需要在 /usr/share/wireshark/protobuf 或 $HOME/.wireshark/protobuf 中。
我在wireshark安装路径中没有共享文件夹和protobuf文件夹。我可以简单地将 proto …
我有一个输入文件
Corn Fiber 17
Beans Protein 12
Milk Protien 15
Butter Fat 201
Eggs Fat 2
Bread Fiber 12
Eggs Cholesterol 4
Eggs Protein 8
Milk Fat 5
Run Code Online (Sandbox Code Playgroud)
这被加载到表中。然后我可以运行命令来检查项目的值。例如>print(foods.Eggs.Fat)
2
我需要做的是能够搜索某个项目是否已在表中。我有一个函数可以检查表是否有值,但它似乎不起作用。我的代码:
file = io.open("food.txt")
function has_value (tab, val)
for index, value in ipairs(tab) do
if value == val then
return true
else
return false
end
end
end
foods = {}
for line in file:lines()
do
local f, n, v = line:match("(%a+) (%a+) (%d+)")
if foods[f] then
foods[f][n] = v …Run Code Online (Sandbox Code Playgroud) 我想知道nilLua 中表中的 是否是有效元素。
我不明白的是
下面的代码打印3
t = {1, 2, 3, nil};
print(#t);
Run Code Online (Sandbox Code Playgroud)
但下面的打印4
t = {1, nil, 3, 4};
print(#t);
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这两个代码输出不同的结果。
我正在做一些测试,看看我可以在哪里提高我的 lua 代码的性能。
我正在阅读此文档:https : //www.lua.org/gems/sample.pdf ,我认为使用整数作为表索引应该会快得多,因为它使用表的数组部分并且不需要散列。
所以我写了这个测试程序:
print('local x=0 local y=0 local z=0')
local x=0 local y=0 local z=0
t0 = os.clock()
for i=1,1e7 do
x = 1
y = 2
z = 3
end
print(os.clock()-t0 .. "\n")
print("tab = {1,2,3}")
tab = {1,2,3}
t0 = os.clock()
for i=1,1e7 do
tab[1] = 1
tab[2] = 2
tab[3] = 3
end
print(os.clock()-t0 .. "\n")
print("tab = {[1]=1,[2]=2,[3]=3}")
tab = {[1]=1,[2]=2,[3]=3}
t0 = os.clock()
for i=1,1e7 do
tab[1] = 1 …Run Code Online (Sandbox Code Playgroud) 我试图在 Garry's mod Lua 中找到与表的值关联的键,但我收到错误,就好像它不是表一样。
这是我正在维护/修复的其他人代码上的游戏崩溃错误的更大解决方案的一部分。
长话短说,我需要根据密钥的值来获取密钥的编号。一个存在此问题的简单、简短的代码:
function starttest()
local tbl = {"a", "b", "c"}
local printme = FindValueInTable(tbl, "c")
print(printme)
end
function FindValueInTable(table, value)
for k, v in table do --errors on this line saying "attempt to call a table value"
if v == value then
return k
end
end
return nil
end
Run Code Online (Sandbox Code Playgroud)
我不知道在这里要做什么,因为它table实际上是一张桌子,怎么可能for k,v in table真的失败呢?
我期望的结果是它返回具有 中值的数字键value。因此,如果value == "c"和table[3]恰好有该值,"c"那么它应该3作为结果返回。
lua ×10
lua-table ×10
arrays ×1
garrys-mod ×1
insert ×1
iteration ×1
lua-api ×1
lua-patterns ×1
performance ×1
python ×1
string ×1
tshark ×1
wireshark ×1