Lua语言学习(三)字符串与table表

Lua中有内置的对字符串进行操作的方法,这些方法在一般的开发中也足够帮我们应对字符串的相关处理。

table表是Lua的核心,他可以让我们实现在Lua中模拟类和对象。

一、字符串

       1.表现形式:

                ①.用双引号包裹:“constant”
                ②.用单引号包裹: 'constant'
                ③.用双方括号包裹:[[constant]]   (该形式可换行)

       2.字符串相关操作方法

               1.字母大小写转换:string.upper( 字符串变量 ):字母全部转大写格式

                                             string.lower( 字符串变量 ):字母全部转小写格式

               2.字符串反转:string.reverse( 字符串变量 ):将字符串进行位置反转

               3.字符串长度:string.len( 字符串变量 ):返回字符串的长度

               4.字符串替换:string.gsub(原始字符串,旧字符串,新字符串,[替换次数])

               5.字符串格式化:string.format(字符串格式,变量 1,变量 2,变量 N)

          

        3.字符串相关字符

                 1.字符串相连字符:". ."
                 2.转义字符:\

二、table表

          

        1.table的基本定义:

              <1>.什么是 table?:table 是 Lua 语言中的一种“数据/代码结构”,可以用来帮助我们创建不同                                                                                 的“数据类型”;Lua 语言中的数组其实就是 table 类型.

              <2>.table 和数组的关系:table 是 Lua 语言中的一种“代码格式结构”,而 Lua 当中的数组就是使用                                                                                table这种结构实现的。

          

        2.table的基础操作:

               <1>.声明和赋值:
                             a. 初始化table:  表名 = { }
                             b. 给 table 赋值:
                                     1.数组方式,就是以角标方式进行赋值,1,2,3,4,5.....
myTable = {}  --直接声明
myTable[1] = 'first'
myTable[2] = 123
print(myTable[1])

                                     2.键值对方式,类似于 C#当中的 Dictionary<k, v>泛型字典.

myTable = {}  --直接声明
myTable['name'] = 'myName'
myTable['age'] = 21
myTable['isboy'] = true
print(myTable['age'])   

                              c.迭代器方式遍历 table

for key, value in ipairs(表名) do        --如果是数组结构,用 ipairs 方法;如果是键值对结构,用 pairs 方法.
      print(key, value)
end

         <2>.table的相关操作方法:

                  1.增加元素:table.insert(表名, [位置], 值)

                                        往指定的位置增加元素,如果不写位置,默认往最后一个位置增加。

                                                   这个方式适合“数组模式”,不太适合“键值对模式”。

                                                   键值对就用:表名[‘键’] = 值 的方式添加即可。

                      2.移除元素:table.remove(表名, [位置])

                                          如果不写位置,默认移除最后一个元素,如果位置值超出范围,不会报错,也不会有元素被移除。
                                                这个方式适合“数组模式”,不能用于“键值对模式”。

                                                键值对就用:表名[‘键’] = nil 的方式移除即可。

                   3.table 长度:table.getn(表名), 返回 table 表的长度。

                                 这个方式适合“数组模式”,不能用于“键值对模式”。
                                                     键值对就用:迭代器迭代,然后累加一个变量的方式获得长度。

          可以看出table自带的操作函数大都只适用于数组模式,键值对模式相对麻烦点。

三、Lua的Metatable元表

          本来Metatable元表也可归到table中,但正因为有了Metatable元表,才让我们在Lua中有了类和对象的概念。

        1.元表的作用:

               元表(metatable)就是让两个表之间产生“附属”关系,只需要操作主表,就可以间接的操作元表。

       2.元表相关操作方法:

             <1>.实例化两个普通表[表 A 和表 B]

             <2>.关联两个表[将表 B 设置成表 A 的元表],需要用一个新的函数:setmetatable(表 A, 表 B)

             <3>.getmetatable(表名):如果表名有元表,就返回元表的类型和地址;如果没有元表,则返回一个 nil

             <4>.元表名.__index = 元表名  (index前为两个_)

tableA = {}
tableB = {}

tableA['Aname'] = '我是A'
tableA['Aage'] = 25
tableB['Bname'] = '我是B'
tableB['Bage'] = 95

setmetatable(tableA, tableB)   --将tableA设为主表,tableB为子表

tableB.__index = tableA    --将tableB的索引赋给tableA,这一步不能遗漏
print(tableA.Bname)        --此时tableA就可以通过tableB的索引访问其中的值
print(tableA['Bname'])     --也就是说table完全成为了tableA的一部分

猜你喜欢

转载自blog.csdn.net/qq_37873310/article/details/80423826