作者:王瑾瑜2702935333 | 来源:互联网 | 2023-08-25 17:03
1、table中存储值的时候,是按照顺序存储的,存储k-v的时候,是按照k的哈希值存储的。2、ipairs---只能输出table中的值,并且不可输出nil,遇到nil就退出 pa
1、table中存储值的时候,是按照顺序存储的,存储 k-v 的时候,是按照 k 的哈希值存储的。
2、ipairs --- 只能输出 table 中的值,并且不可输出nil,遇到 ni l就退出
pairs --- 可以输出 table 中的值与 k-v ,并且是按照先输出值,再乱序输出 k-v 的顺序进行输出,可以输出 nil
3、以下是结论:
1>单独的值:两者的输出结果一致
2>单独的 k-v:再细分为 --- k 全部为数字(ipairs一定是需要从1开始,每次递增1,遇到不连续的k就退出))、k 全部为非数字、k为数字与非数字的混合
3>值与 k-v 的混合: 当数组索引与数字 k 有冲突的时候,ipairs 不遍历这个情况的 k-v ,不冲突会遍历数字 k
4、以下是针对3的部分 ipairs 测试代码:
a = {[0] = "a1", [2] = "a2", [3] = "a3", [5] = "a4", [6] = "a5"}
没有结果输出!!!因为纯数字的 k 不是从 1开始的
a = {[1] = "a1", [2] = "a2", [3] = "a3", [5] = "a4", [6] = "a5"}
table={n = 4, "Hello", [3] = "oi", m = 0, "World", a=1, b=2, "Lua","C#"}
table={"Hello", [2] = "oi", "World"}
table={"Hello", [2] = "oi"}