|
楼主 |
发表于 2024-4-19 15:58:35
|
显示全部楼层
1.数组和切片
数据结构本质就是怎么堆放和查找数据的方式。那么最直接的,最简单的方式必然是把所有数据连续堆放,一个一个找。
这就是数组,参考 https://baike.baidu.com/item/%E6%95%B0%E7%BB%84/3794097?fr=ge_ala。
数组的本质就是一块连续的内存。当你知道第一个元素的地址后,通过加上偏差量*数据长度,就能得到之后任何一个元素的值了,这也是绝大部分语言的数组的下标是从0开始的原因。
在读取的场景下,数组的获取效率是非常高的。缺点是必须分配足够大的空间,以及维护时涉及扩容和移动的操作。
而切片,其实就是获取数组种的一部分,比如一个40个空间的内存段,我使用其中的第3-20号空间。这样当我需要时,还能继续改变长度追加数据,起到变长数组的效果。
对于脚本面对的场景来说,绝大部分场景只需要应用号数组和切片就够了。
在lua里有一个最想接近数组的类型
那就是~
table同学做下,没你啥事
那就是字符串,string同学,掌声给起~~~~
开个玩笑,string并不是真的是数组,他对应的还是C语言里的字符串,参考, 只不过他是lua里最像数组的一个东西,以至于同样没有数组的javascript语言还搞了个TypedArray来解决诸如图片处理之类的功能。
而table中的list部分,那就是个孽种,让我一看就头大,情愿把链表弄进来……
总体来说,如果要形象的形如数组的话。
数组就是承包一整块地造房间,然后用连续的编号给房间命名,给房间里的人送饭只要一路走下去每个房间发一个盒饭就行,而要找第N号房间的住户,主要从第一个房间向后走N步,直接开门就行。简单,粗暴,直接。
|
|