lua table 的操作

  table在前面作过介绍,它是一种关联数组,这种关联指的是可以设置各类类型的key来存储值。

1.table 间的数据传递

     -- 为 table a 并设置元素,然后将 a 赋值给 b,则 a 与 b 都指向同一个内存地址
     -- 如果 a 设置为 nil ,则 b 同样能访问 table 的元素。
     -- 如果没有指定的变量指向a,Lua的垃圾回收机制会清理相对应的内存。
        mytable = {};
     print("mytable的类型是:",type(mytable));

     mytable[1] = "lua"
     mytable["wow"] = "修改前的值"

     print("mytable 索引为1的元素是:",mytable[1])
     print("mytable 索引为wow的元素是:",mytable["wow"])

     beforetable = mytable;
     print("beforetable 索引为1的元素是:",beforetable[1])
     print("mytable 索引为wow的元素是:",mytable["wow"])
     beforetable["wow"] = "修改后的值"
     print("mytable 索引为wow的元素是:",mytable["wow"])

     -- 释放变量
     beforetable = nil;
     print("beforetable是:",beforetable)

     -- mytable 仍然可以访问
     print("mytable索引为wow的元素是:",mytable["wow"])
     mytable = nil;
     print("mytable是:",mytable)

2.table的操作

-- table 的操作:
        -- 1.连接 table.concat()
        -- 2.插入 table.insert();在数据的指定位置插入元素,默认在末尾
        -- 3.移除 table.remove(table,pos) 移除指定位置的元素
        -- 4.排序 table.sort(table)

     fruits = {"banana","orange","apple"}

   --- 连接操作
     print("连接后的字符串是:",table.concat(fruits));
     -- 指定符号连接
     print("连接后的字符串是:",table.concat(fruits,", "));
     -- 指定索引连接
     print("连接后的字符串是:",table.concat(fruits,", ",2,3));
   --- 插入操作
     table.insert(fruits,2,"pear")
     print("插入后的元素是:",fruits[2])

    --- 移除操作
     print("移除前是:",table.concat(fruits,", "));
     table.remove(fruits,3);
     print("移除前后:",table.concat(fruits,", "));
    

    --- 排序操作
     print("排序前:")
     for i, v in pairs(fruits) do
        print(i,v)
     end

     table.sort(fruits)
     print("排序后:")
     for i, v in pairs(fruits) do
        print(i,v)
     end

原文地址:https://www.cnblogs.com/MrRightZhao/p/11288313.html

时间: 2024-09-27 18:29:57

lua table 的操作的相关文章

lua table remove元素的问题

当我在工作中使用lua进行开发时,发现在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是: for key, value in pairs(tbtest) do XXX end for key, value in ipairs(tbtest) do XXX end for i=1, #(tbtest) do XXX end for i=1, table.maxn(tbtest) do XXX end 前两种是泛型遍历,后两种是数值型遍历.当然你还

lua table引用问题

一,基础 1,在lua中,table只是传递引用,所以不能用简单的 "=" 来copy两个表,并试图修改一个表中的值. tb = {} tb.a = 11 tb.b = 22 tb_ref = tb function p(tip)   print("--------------------------"  .. tip)   print("tb.a = " .. tb.a .. "    " .. "tb.b = &

从实现求差集介绍lua table需要注意的一些问题

用lua实现的求两个table的差集(只支持一维table) 1.lua table 判空: table 判空,用的了next()函数. next()函数说明:运行程序来遍历表中的所有域. 第一个参数是要遍历的表,第二个参数是表中的某个键. next 返回该键的下一个键及其关联的值. 如果用 nil 作为 第二个参数调用 next 将返回初始键及其关联值. 当以最后一个键去调用,或是以 nil 调用一张空表时, next 返回 nil. 如果不提供第二个参数,将认为它就是 nil. 可以用 ne

lua table integer index 特性

table.maxn (table) Returns the largest positive numerical index of the given table, or zero if the table has no positive numerical indices. (To do its job this function does a linear traversal of the whole table.) 返回表中最大的正数值index. 说明: 1. 此接口不是统计表中元素的

Lua table pair和ipair区别

官方描述: ipairs (t) Returns three values: an iterator function, the table t, and 0, so that the construction for i,v in ipairs(t) do body end will iterate over the pairs (1,t[1]), (2,t[2]), ···, up to the first integer key absent from the table. pairs (

Lua table 的长度问题

直入主题 我们要取lua table的长度时习惯这样 local tb = {1,2,3,4} print(#tb) 这时候,输出理所当然的是4,如果在程序中我们需要判断长度时使用这样的方法,再看一下 tb[1] = nil print(#tb) 输出还是4,似乎有点背离我们的意愿 我们想知道这个table里面是不是有4个值,但是有一个值被置空了,输出结果却没有及时告诉我们 发生这样问题的原因是,lua在初始化table的时候,会给这个table分配值存储的空间,代码里面tb初始化包含4个数字值

树形打印lua table表

local print = print local tconcat = table.concat local tinsert = table.insert local srep = string.rep local type = type local pairs = pairs local tostring = tostring local next = next function print_lua_table (lua_table, indent) if not lua_table or t

通过ICursor对Table进行操作(添加、修改、删除)

通过ICursor对Table进行操作(添加.修改.删除) 2010-03-16 16:07:37|  分类: 工作|举报|字号 订阅 来自:http://blog.163.com/liuyang1285%40126/blog/static/12891308620102164737313/ 连接上数据表的目的就是对其进行包括浏览.添加.修改.删除等基本操作.浏览功能,之前文章中一提到,就是将Itable转换为DataTable与DataGridView的DataSource绑定实现.此文主要实现

(转) 关于lua table是否为空的判断

在项目的脚本lua中经常有这样的需求, 1.local a = {} 2.对a进行处理 3.对a是否为空表进行判断 关于对a是否为空表的判断,我发现有些代码如此做: if a == {} then 这样的结果就是a == {}永远返回false,是一个逻辑错误.因为这里比较的是table a和一个匿名table的内存地址. 也有些代码如此做: if table.maxn(a) == 0 then 这样做也不保险,除非table的key都是数字,而没有hash部分. 难道真的要遍历table发现有