标签: lua-table

如何使用lua中返回表的函数?

我无法处理函数返回的表。有人可以帮助我吗?

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 lua-table

5
推荐指数
1
解决办法
7011
查看次数

在 Lua 中从 gmatch 返回的列表创建数组

我正在用 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)

我怎样才能做到这一点。

arrays string lua lua-patterns lua-table

5
推荐指数
1
解决办法
4002
查看次数

按值插入/删除表

我有两张表,例如:

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 以将元素放在匹配的索引上。

iteration lua insert lua-table

5
推荐指数
1
解决办法
4364
查看次数

5
推荐指数
2
解决办法
318
查看次数

如何使用名称C-API创建Lua表

如何从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)

lua lua-c++-connection lua-api lua-table

5
推荐指数
1
解决办法
674
查看次数

如何在Wireshark中解析protobuf数据包

我的目标是拥有一个插件/解析器,可以解析基于 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 …

python lua wireshark tshark lua-table

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

检查 Lua 表中的项目

我有一个输入文件

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)

lua lua-table

5
推荐指数
1
解决办法
4224
查看次数

'nil' 作为 Lua 表中的元素?

我想知道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 lua-table

5
推荐指数
1
解决办法
5154
查看次数

在我的速度测试中,Lua 表哈希索引比数组索引更快。为什么?

我正在做一些测试,看看我可以在哪里提高我的 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)

performance lua lua-table

5
推荐指数
1
解决办法
1345
查看次数

为什么在迭代表时会出现“尝试调用表值”的情况?

我试图在 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 lua-table garrys-mod

5
推荐指数
1
解决办法
5729
查看次数