精华内容
下载资源
问答
  • Lua的table

    2020-04-14 15:00:00
    tableLua 一种数据结构用来帮助我们创建不同数据类型,如:数组、字典等。 Lua table 使用关联型数组,你可以用任意类型值来作数组索引,但这个值不能是 nil。 Lua table 是不固定大小,你可以根据...

    Lua table(表)

    table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。

    Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。

    Lua table 是不固定大小的,你可以根据自己需要进行扩容。

    Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。 例如string.format表示使用"format"来索引table string。

    table(表)的构造

    构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:

     

    当我们为 table a 并设置元素,然后将 a 赋值给 b,则 a 与 b 都指向同一个内存。如果 a 设置为 nil ,则 b 同样能访问 table 的元素。如果没有指定的变量指向a,Lua的垃圾回收机制会清理相对应的内存。

    以下实例演示了以上的描述情况:

     

     以上代码执行结果为:

    Table 操作

    以下列出了 Table 操作常用的方法:

    序号方法 & 用途
    1 table.concat (table [, sep [, start [, end]]]):

    concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。

    2 table.insert (table, [pos,] value):

    在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾.

    3 table.maxn (table)

    指定table中所有正数key值中最大的key值. 如果不存在key值为正数的元素, 则返回0。(Lua5.2之后该方法已经不存在了,本文使用了自定义函数实现)

    4 table.remove (table [, pos])

    返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。

    5 table.sort (table [, comp])

    对给定的table进行升序排序。

    接下来我们来看下这几个方法的实例。

    Table 连接

    我们可以使用 concat() 输出一个列表中元素连接成的字符串:

     

     

    插入和移除

    以下实例演示了 table 的插入和移除操作:

     

    Table 排序

    以下实例演示了 sort() 方法的使用,用于对 Table 进行排序:

     

     

    Table 最大值

    table.maxn 在 Lua5.2 之后该方法已经不存在了,我们定义了 table_maxn 方法来实现。

    以下实例演示了如何获取 table 中的最大值:

     

     执行以上代码输出结果为:

     注意:如果索引断开了,那算的总数就是不全的。

     

     

    展开全文
  • function UIUtils.DicToTable(CSharpDic) --将C#的Dic转成Lua的Table local dic = {} if CSharpDic then local iter = CSharpDic:GetEnumerator() while iter:MoveNext() do lo...
    function UIUtils.DicToTable(CSharpDic)
        --将C#的Dic转成Lua的Table
        local dic = {}
        if CSharpDic then
            local iter = CSharpDic:GetEnumerator()
            while iter:MoveNext() do
                local k = iter.Current.Key
                local v = iter.Current.Value
                dic[k] = v
            end
        end
        return dic
    end
    function UIUtils.ListToTable(CSharpList)
        --将C#的List转成Lua的Table
        local list = {}
        if CSharpList then
            local index = 1
            local iter = CSharpList:GetEnumerator()
            while iter:MoveNext() do
                local v = iter.Current
                list[index] = v
                index = index + 1
            end
        else
            logError("Error,CSharpList is null")
        end
        return list
    end

     

    展开全文
  • Lua的table元表自我学习笔记分享。--lua元表总结 --1、__index的运用 (调用table的一个不存在的索引时,会使用到元表的__index元方法,搜索元表是否也有改索引,__index可以是一个函数也可是一个table。)
  • lua的table表去重

    千次阅读 2020-04-02 09:28:51
    用过lua的人都知道,lua的table中不允许存在相同的key,利用这个思想,我们可以将原始table(记作table1),用一个新的table(记作table2)来存放,存放得时候将table1的value作为table2得key,将值赋为true...

    推荐阅读:

    方法一

    用过lua的人都知道,lua的table中不允许存在相同的key,利用这个思想,我们可以将原始table(记作table1),用一个新的table(记作table2)来存放,存放得时候将table1的value作为table2得key,将值赋为true,最后只需要遍历table2,将其的key保存在一个新的table(记作table3)里。

    例如:原始table1={1,2,3,4,5,2,3}

      local table1={1234523}
      local table2={}
      for key,val in pairs(table1) do
         table2[val]=true
      end
    
      local table3={}
      for key,val in pairs(table2) do
         table.insert(table3,key)--将key插入到新的table,构成最终的结果
      end
    
    方法二
    local list={1234523}
    local temp1 = clone(list)
    local temp2 = clone(list)
    for k1, v1 in ipairs(temp1) do
        for k2, v2 in ipairs(temp2) do
            if v1 == v2then
                table.remove(temp1, k1)
                table.remove(temp2, k1)
            end
        end
    end
    
    拓展:移除table中数据里具有某个相同字段的数据,例如,table如下:需移除具有相同value相同的数据
    local list={}
    list[1]={id=10001,sid=1001,value=5}
    list[2]={id=10002,sid=1001,value=3}
    list[3]={id=10003,sid=1001,value=4}
    list[4]={id=10004,sid=1001,value=5}
    

    利用方法二拓展本功能:

    local list={}
    list[1]={id=10001,sid=1001,value=5}
    list[2]={id=10002,sid=1001,value=3}
    list[3]={id=10003,sid=1001,value=4}
    list[4]={id=10004,sid=1001,value=5}
    local temp1 = clone(list)
    local temp2 = clone(list)
    for k1, v1 in ipairs(temp1) do
        for k2, v2 in ipairs(temp2) do
            --同种英雄同一星级的移除
            if v1.id ~= v2.id and v1.value == v2.value and v1.sid == v2.sid then
                table.remove(temp1, k1)
                table.remove(temp2, k1)
            end
        end
    end
    
    展开全文
  • Lua的table处理

    2017-05-19 23:42:00
    lua 整体效率是很高,其中,它 table 实现很巧妙为这个效率贡献很大。 lua table 充当了数组和映射表双重功能,所以在实现时就考虑了这些,让 table 在做数组使用时尽量少效率惩罚。 lua 是这样...

    -copy自云风的blog

    lua 的整体效率是很高的,其中,它的 table 实现的很巧妙为这个效率贡献很大。

    lua 的 table 充当了数组和映射表的双重功能,所以在实现时就考虑了这些,让 table 在做数组使用时尽量少效率惩罚。

    lua 是这样做的。它把一个 table 分成数组段和 hash 段两个部分。数字 key 一般放在数组段中,没有初始化过的 key 值全部设置为 nil 。当数字 key 过于离散的时候,部分较大的数字 key 会被移到 hash段中去。这个分割线是以数组段的利用率不低于 50% 为准。 0 和 负数做 key 时是肯定放在 hash 段中的。

    string 和 number 都放在一起做 hash ,分别有各自的算法,但是 hash 的结果都在一个数值段中。hash 段采用闭散列方法,即,所有的值都存在于表中。如果hash 发生碰撞,额外的数据记在空闲槽位里,而不额外分配空间存放。当整个个表放满后,hash 段会扩大,所有段内的数据将被重新 hash ,重新 hash 后,冲突将大大减少。

    这种 table 的实现策略,首先保证的是查找效率。对于把 table 当数组使用时将和 C 数组一样高效。对于 hash 段的值,查找几乎就是计算 hash 值的过程(其中string 的 hash 值是事先计算好保存的),只有在碰撞的时候才会有少许的额外查找时间,而空间也不至于过于浪费。在 hash 表比较满时,插入较容易发生碰撞,这个时候,则需要在表中找到空的插槽。lua 在table 的结构中记录了一个指针顺次从一头向另一头循序插入来解决空槽的检索。每个槽点在记录 next 指针保存被碰撞的 key 的关联性。

    整个来说,这种解决方法是非常不错的。

    ---上点例子

    t={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6}
    for i=1,20 do
            t[i]=nil
            table.insert(t,20)
    end
    for i=1,30 do
            print(t[i])
    end
    得出的结果:
    20
    20
    20
    20
    nil
    nil
    nil
    nil
    nil
    nil
    nil
    nil
    nil
    nil
    nil
    nil
    nil
    nil
    nil
    nil
    1
    1
    1
    1
    6
    20
    20
    20
    20
    20

    ---再来一段:

    for startIndex = 1,10 do
            t = {}
            for j = startIndex, 15 do
                    t[j] = j
            end
            table.insert(t,"InsertedValue")
            tableStr = ""
            for i = 1,16 do
                    if t[i] == nil then
                            tableStr = tableStr .."nil" .." | "
                    else
                            tableStr = tableStr ..t[i] .." | "
                    end
            end
            print("StartIndex = "..startIndex..", The Table = " .. tableStr)
    end
    ---
    [/i][/i]
    [i][i]StartIndex = 1, The Table = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | InsertedValue | 
    StartIndex = 2, The Table = nil | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | InsertedValue | 
    StartIndex = 3, The Table = nil | nil | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | InsertedValue | 
    StartIndex = 4, The Table = nil | nil | nil | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | InsertedValue | 
    StartIndex = 5, The Table = nil | nil | nil | nil | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | InsertedValue | 
    StartIndex = 6, The Table = nil | nil | nil | nil | nil | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | InsertedValue | 
    StartIndex = 7, The Table = nil | nil | nil | nil | nil | nil | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | InsertedValue | 
    StartIndex = 8, The Table = InsertedValue | nil | nil | nil | nil | nil | nil | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | nil | 
    StartIndex = 9, The Table = InsertedValue | nil | nil | nil | nil | nil | nil | nil | 9 | 10 | 11 | 12 | 13 | 14 | 15 | nil | 
    StartIndex = 10, The Table = InsertedValue | nil | nil | nil | nil | nil | nil | nil | nil | 10 | 11 | 12 | 13 | 14 | 15 | nil | [/i][/i]
    [i][i]

     

    转载于:https://www.cnblogs.com/Fallever/p/6880719.html

    展开全文
  • lua table 处理

    2015-02-11 02:36:00
    lua 整体效率是很高,其中,它 table 实现很巧妙为这个效率贡献很大。 lua table 充当了数组和映射表双重功能,所以在实现时就考虑了这些,让 table 在做数组使用时尽量少效率惩罚。 lua 是这样...
  • 主要介绍了Lua的table库函数insert、remove、concat、sort详细介绍,本文分别给出了这几个函数的使用实例,需要的朋友可以参考下
  • C遍历lua的table

    2016-08-02 18:38:00
    假设table的在stack中的索引位置为index,现在从C代码里面对这个lua的table进行遍历,方法如下: 方法1、当index为正值的时候,可用如下代码: 注意:t>0 void printtb(lua_State *L,int index) { /* ta...
  • Lua教程(三):C语言、C++中调用Lua的Table示 这篇文章主要介绍了Lua教程(三):C语言、C++中调用Lua的Table示例,即在C语言、C++中读取、操作Lua的Table,需要的朋友可以参考下 从写上一篇Lua的...
  • 访问Lua的table 1.映射到普通class或struct 定义一个class,有对应于table的字段的public属性,而且有无参数构造函数即可,比如对于{f1 = 100, f2 = 100}可以定义一个包含public int f1;public int f2;的class。 ...
  • 打印Lua的Table对象

    2016-08-29 12:51:00
    小伙伴们再也不用为打印lua的Table对象而苦恼了, 本人曾也苦恼过,哈哈 不过今天刚完成了这个东西, 以前在网上搜过打印table的脚本,但是都感觉很不理想,于是,自己造轮子了~ 打印的效果,自己感觉还比较慢,不敢私藏...
  • 但是搜索《C调用lua的table里面的函数》 怎么就没几个呢? 经过探索,发现其实逻辑是这样的: 1.根据name获取table ;并判断是否为table 2.根据 name2 获取table的成员变量或方法,并判断栈顶的是否为函数 3.将...
  • 最近遇到一件很郁闷的事情,游戏里面我老是当队长!后来发现是因为队伍里每个人的数据会以游戏的ID为key,其余要用到的数据为value,...一时兴起,重新看了一下lua的table的实现,终于找到原因! 一如既往,先报源...
  • lua的table中实现了table.sort()方法,可以对table进行排序。如果遇到多个条件优先级不同排序的情况,用数值大小对应条件优先级大小可以,通过最终得到的数值大小进行比较 具体例子代码 优先级--双倍类型>非...
  • 一直用lua写逻辑都是面向过程 ,最近要面向对象,在大神的帮助下实现了 ,原理很简单用lua的tablelua的table功能很强大。 功能需求是这样,比如我要多个相同的对象共用同一个脚本根据不同参数,这些对象实现共同...
  • lua的table排序

    2019-09-21 03:13:59
    lua中利用到排序基本上就是构造函数(table)了,为了便于和C区分开来,我俗称它为表单。 实例:(原理就是LUA集成冒泡算法) 排序一般姿势(对于只包含数字或者只包含字符串简单数组) table.sort...
  • lua的table长度问题

    万次阅读 2013-10-13 11:57:54
    又有同事在lua的table长度问题上犯错了,我们一起来看看吧~~~ 看以下代码: local tblTest1 = { 1, 2, 3 } print(table.getn(tblTest1)) 这段代码输出的结果是3,这个大家都知道,是吧。不管最后那个3后面有...
  • openresty开发系列19--lua的table操作Lua中table内部实际采用哈希表和数组分别保存键值对、普通值;下标从1开始不推荐混合使用这两种赋值方式。local color={first="red", "blue", third="green", "yellow"}print...
  • LUA的table实现

    2019-10-08 08:20:21
    下面的结构体是lua中所定义的table typedef struct Table { CommonHeader; lu_byte flags; /* 1<<p means tagmethod(p) is not present */ lu_byte lsizenode; /* log2 of size of 'node' array *...
  • 一种是Table.ItemNamed,这个我们在《C程序操作Lua的Table——1》中介绍过了。下来我们来介绍另一种访问Table成员的方法——Table[index]。  也简单,废话少说,上代码。代码LuaTable2.lua luat_Test = {123, 456}...
  • lua,一款很轻量级很nice很强大的脚本语言,做为lua中使用最为频繁的table表,在使用之时还是有颇多的好处与坑的; 下面是大牛 云风的一片关于lua table的blog,可使得对lua table内在机制 窥测一二; lua 的...
  • 使用Lua的table.sort进行多条件排序

    千次阅读 2019-03-16 00:35:26
    使用Lua的table.sort进行多条件排序 问题描述 排序规则按照: 单位战斗力>单位ID 战斗力按照从高到低排; 单位ID按照从前到后排。 units = {} table.insert(units, {id=101001, power=1}) table.insert(units, {...
  • lua 的table排序

    2015-07-30 11:02:30
    这篇文章主要介绍了Lua中对table排序实例,本文讲解了Lua中对table的一般排序方法、针对值排序、同时对键值进行排序等方法,需要朋友可以参考下 lua中利用到排序基本上就是构造函数(table)了,...
  • C/C++代码里面读取Lua的Table

    千次阅读 2015-09-10 00:10:28
    本教程将介绍Lua的栈及基本栈操作,同时还有如何在C/C++代码里面读取Lua的Table
  • lua的table类型

    2017-01-28 21:41:15
    table类型是lua的核心概念,实现了“关联数组”,以key-value形式出现,以下我整理出table的要点,以及构建table时的要点。 1.table的key值类型可以是除nil外的任何类型,而value值类型可以是包括nil在内的任何类型...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,635
精华内容 1,854
关键字:

lua的table