网站设计方案谁写,安新网站建设,天津网站建设运营方案,手机在线网站建设文章目录 Table的一万种用法二维数组类和结构体Table操作insert removesortconcat 接上文【Lua学习笔记】Lua进阶——Table#xff0c;迭代器 Table的一万种用法
二维数组
a {{ 1, 2, 3 },{ 4, 5, 6 },
}
print(#a) --2
for i1,#a dob a[i]for j1,#b doprint(b[… 文章目录 Table的一万种用法二维数组类和结构体Table操作insert removesortconcat 接上文【Lua学习笔记】Lua进阶——Table迭代器 Table的一万种用法
二维数组
a {{ 1, 2, 3 },{ 4, 5, 6 },
}
print(#a) --2
for i1,#a dob a[i]for j1,#b doprint(b[j])end
end
应该不用解释吧类和结构体
Lua是面向过程的所以想要实现面向对象只能在形式上模拟。 那么面向对象要实现什么继承封装多态这些暂且不谈首先一个类模块应当需要成员变量和成员方法。
car {color red,size big,StartEngine function()print(汽车,启动!)end,
}
car.StartEngine();
--在table外声明方法
car.StopEngine function()print(停车)
end
car.StopEngine();
--另一种声明方式
function car.Speaker()print(嘟嘟嘟)
end
car.Speaker()
输出:
汽车,启动!
停车
嘟嘟嘟上述代码确实看起来很像类但是应当记住它是个table别真的把它当作面向对象了例如下面
car {color red,size big,StartEngine function()print(color)end,
}
car.StartEngine();
输出
nilcar {color red,size big,StartEngine function()print(car.color)end,
}
car.StartEngine();
输出
red很简单如果直接print(color)那么color则是我们新定义的一个全局变量它没有赋值自然是nil。 而想要打出red就需要print(car.color)因为我们要打印的不是color而是car这个table中的一个元素
car {color red,size big,StartEngine function()print(self.color)end,PrintColor function (t)print(t.color)end
}
car.PrintColor(car);
car:PrintColor();
输出:
red
redlua提供了一个语法糖当我们用冒号调用方法时会把调用者作为第一个参数传入方法中
function car:PrintSize() --相当于function car.PrintSize(car)print(self.size)
end
car.PrintSize(car);
car:PrintSize()
car:PrintSize(car)
输出:
big
big
big冒号主要就是为了在函数调用时使用self关键字self不同与this它代表的应当是这个冒号传入的参数。除了提供便利性之外冒号还会为我们节省一条指令。有种脱裤子放屁的美。 Table操作
insert remove
t1 {{ age 1, name a },{ age 2, name b },
}
t2 { age 3, name c } --注意t2是一维的for i 1, #t1 dob t1[i]print(b)
end
print(插入后)
table.insert(t1,t2)
for i 1, #t1 dob t1[i]print(b)
end
print(t1[1].name)
print(t1[2].name)
print(t1[3].name)table: 00A2A580
table: 00A2A4B8
插入后
table: 00A2A580
table: 00A2A4B8
table: 00A2A5D0
a
b
c执行insert后我们观察地址不难发现新数据被插入到尾部了同样的执行table.remove方法也会移除最后一个索引的元素。
table.insert(t1,2,t2)
for i 1, #t1 dob t1[i]print(b)
end
print(t1[1].name)
print(t1[2].name)
print(t1[3].name)a
c
btable.remove(t1,2,t2)
for i 1, #t1 dob t1[i]print(b)
end
print(t1[1].name)
print(t1[2].name)
print(t1[3].name) --报错
a
blua也提供了带position值的insert和removeinsert会直接插入到pos位置并将其后的元素都后移一个单位而remove则会删除对应位置并将其后元素都前移一个单位
sort
table.sort排序用法
t { 2, 5, 5, 3, 6 }
table.sort(t)
for index, value in ipairs(t) doprint(value)
end
print(--------)
table.sort(t, function(a, b)if ab thenreturn trueend
end)
for index, value in ipairs(t) doprint(value)
end输出
2
3
5
5
6
--------
6
5
5
3
2知道升序和降序用法即可默认升序使用ab reutrn true可以修改为降序猜想排序function与冒泡排序有关
concat
t { 5, 5, 2, 3, 6 }
str table.concat(t,,)
print(str)5,5,2,3,6str table.concat(t,,,2,5)
print(str)5,2,3,6使用table.concat方法其返回值是字符串所以我们拼接时只能用number和string类型的此外别忘了需要把返回值赋值来接收最后处理的结果