UH2S3L7——访问Lua中table表现List和Dictionary
UH2S3L7——访问Lua中table表现List和Dictionary
本章代码关键字
1 | luaState.GetTable() //获取全局table变量,为引用拷贝 |
获取Table
和xLua的表映射为某种数据结构不同,toLua我们需要使用专门获取表的方法GetTable()
1 | LuaTable luaTable = LuaManager.Instance.LuaState.GetTable("testList"); |
然后再通过获取到的表去表现其他的数据结构
值得一提的是,通过这种方式获取的Table是引用拷贝,修改其中的值会修改到Lua中table的值
1 | LuaTable luaTable = LuaManager.Instance.LuaState.GetTable("testList"); |
还可以通过下面的方式获取表,原理就是以获取全局变量的方式获取表,再as
成LuaTable
1 | LuaTable table = LuaManager.Instance.LuaState["testClass"] as LuaTable; |
table表现List
对于下面用table模拟的list
1 | -- table表现的list |
如果我们要在C#中如列表那样调用其中的元素,我们需要先获取table,然后通过索引去获取其中的值,索引和Lua一样从1开始
1 | LuaTable luaTable = LuaManager.Instance.LuaState.GetTable("testList"); |
遍历table表现的List
如果要遍历table模拟的List,需要先通过ToArray()
方法,去转换成数组,再遍历
1 | object[] objs = luaTable.ToArray(); |
table表现Dictionary
对于下面用table模拟的Dictionary
1 | -- table表现的Dictionary |
如果我们要在C#中如字典那样调用其中的值,我们需要先获取table,然后通过键去获取对应的值
1 | LuaTable dic = LuaManager.Instance.LuaState.GetTable("testDic"); |
但是,通过中括号传入键获取值,只支持int
和string
,其他类型的键没办法直接获取,
对于这种情况,我们需要先使用ToDictTable<>()
方法转换为LuaDictTable
,声明和使用方法与一般的Dictionary<>
一致
这样就能使用非int
和string
类型的键去获取值
1 | LuaDictTable<string, int> luaDic = dic.ToDictTable<string, int>(); |
遍历table表现的dictionary
对于LuaDictTable
,最好使用迭代器去遍历
1 | IEnumerator<LuaDictEntry<object, object>> ie = luaDic2.GetEnumerator(); |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!