工作需要学习lua,对于表和c#等字典的联系和区别异常混乱,特此记录下本次lua学习中出现的语法错误和个人理解
lua定义第一层表只需要
global tablename={} 或 local tablename={} --声明并初始化为空表
--(全局变量可以省略global)
注意此时初始化的空表已经不等于nil空值了,至少编辑器报错判定它已经不是nil了
tablename[下标] 并不代表是类型为表tablename的数组,而是 表tablename的键 为 “下标” 时的值
反观c#对键值对的定义声明和调用:
// 创建一个字典
Dictionary<string, int> ageDictionary = new Dictionary<string, int>();
// 添加键值对
ageDictionary.Add("Alice", 30);
ageDictionary.Add("Bob", 25);
ageDictionary.Add("Charlie", 28);
// 遍历字典并打印键值对
foreach (KeyValuePair<string, int> kvp in ageDictionary)
{
Console.WriteLine($"Name: {kvp.Key}, Age: {kvp.Value}");
}
c#的键值对声明是直接给定了数据类型,给定的数据类型可以是自定义的,比之lua的好处是清晰明了,极大方便了声明
但相比lua的形式,c#键值对的缺点是找对应的key得调用方法去遍历查找与参数等值的key,而lua只需要写上下标像数组一样引用即可
笔者愚见,对于笔者而言,一下子要将lua的键值对表的下标和惯用的是数组的思路区别开又不完全区别开有点转不过弯,它就如它的定义——“表”,其实就是表的第一列,一个二维表(如下)
外层下标1 |
| ||||
外层下标2 | |||||
外层下标3 |
我认为,lua和c#的另一个区别是,
lua必须先定义初始化外层,然后再根据 下标行的值 是否为表再进行处理,如果是表,判定这个表之前就得重新给下标所在行的值的表初始化,否则就会报空
而c#则是相反的,先定义里层的键值对,也不需要初始化,然后给外层键值对 拿去用就行