第二章数据与标准库
表格
表格是lua中唯一的数据结构。
--创建表格
x = 5
a = {}
b = { key = x, antherkey = 10 } --字符串做key
c = { [x] = b, ["string"] = 10, [34] = 10, [b] = x} --[x]=b,x是key,内容是表格b
--给表格赋值
a[1] = 20
a["foo"] = 50
a[x] = "bar"
print(b["key"]) --5
print(b[key])--nil
print(c["string"])--10
print(c[34])--10
print(c[b])--5
print(c[x])--table:0x2467e50
print(c[5])--table:0x2467e50
这里a初始化为空表,b中字符串不加[]表示直接用字符串做key,从代码运行结果可以看出,在c中要想获取key为x的值,可以通过c[x]也可以通过c[x的值]两种方式。此外从c的定义可以看出可以用任何类型的数据做关键字,包括用表格。
Syntactic Sugar
可以通过如下方式访问和修改表格的数据:
t = {foo = 1,bar =2}
print(t.foo) --1
t.bar =3
数组和指针
在创建表格时,如果不设置key,而是直接这样定义:
a = {11,22,"foo","bar"}
也就相当于是定义了一个数组,此时,会按顺序给其分配key,从1开始分别,于是便可以这样修改表格:
a[3] = "foooo"
也可以这样访问表格数据:
print(a[1])--11
print(a[3])--foo
print(#a) --4
最后一行代码通过#获得表格a的长度。
Generic for Loop
a = {x = 400, y = 300, [20] = "foo"}
b = { 20, 30 ,40}
for key , value in pairs(a) do
print(key, value)
end
for index, value in ipairs(b) do
print(index, value)
end
pairs是一个迭代器,可以获得表格的关键字和值,而ipairs与pairs的作用一样,是ipairs只用于指针形式的表格(即不声明关键字的表格)它从1开始遍历直到遇到nil时。
表格上的一些操作
t = {24,25,8,13,1,40}
table.insert(t,50)--在表格末尾插入
table.insert(t,3,89)--在第3个位置插入
table.remove(t,2)--删去第2个位置的数据
table.sort(t)--将表格由小到大排序
字符串
字符串可以用单引号声明也可以用双引号,还可以用[[...]]声明多行字符串。
s = "foo\nbar"
t = 'he said "hello world"'
u = "Hello \"world\""
v = [[
<html>
<body>
<p>Hello world!</p>
</body>
</html>
]]
字符串操作
string.lower("HeLLO") -- hello 小写
string.upper("Hello") -- HELLO 大写
string.reverse("world") -- dlrow 逆反
string.char(87) -- W 数字变字符
string.sub("hello world", 2, 5) -- ello 子串
特殊的
string.gsub("hello 42", "(%d+)", "%1 3") -- hello 42 3
这里gsub(字符串s,模式p,替换t),在s中找到模式为p的子串,然后用t替换掉这部分。得到新的字符串,而gsub的返回值,不止包含替换之后的字符串,也包含替换的次数,两个数据。
而且“替换t”可以是字符串,也可以其他的模式,也可以是一个函数,比如:
-- 4 + 4 = 8
string.gsub("2 + 2 = 4", "(%d)", function(s)
return s * 2
end)
在上面的代码中,“替换t”就是一个函数,实现的结果就是将字符串中匹配模式p的部分执行函数s,每个数扩大两倍。
-- prints each word
for w in string.gmatch("good morning chaps", "%w+") do
print(w)
end
输出:
gmatch是返回查找到字符串的迭代器,gmatch(字符串s,模式p),gmatch找到字符串s匹配模式p的内容。
t = {}
s = "from=world, to=Lua"
for k, v in string.gmatch(s, "(%w+)=(%w+)") do
t[k]=v
end
for k, v in pairs(t) do
print(k, v)
end
输出:
参考链接:https://blog.csdn.net/u012654882/article/details/70766946