访问数组类型的table
callluaentrance测试脚本中内容:
//--------------------------------------访问table-----------------------------
//4.1 访问list/数组类型的table
//获取table
luatable luatable = callluamanager.instance().luastate.gettable("arraytable");
//直接访问
debug.log("luatable[1] " luatable[1]);
debug.log("luatable[2] " luatable[2]);
debug.log("luatable[3] " luatable[3]);
debug.log("luatable[4] " luatable[4]);
debug.log("luatable[5] " luatable[5]);
debug.log("luatable[6] " luatable[6]);
debug.log("luatable[7] " luatable[7]);
//转成array存储访问
object[] array = luatable.toarray();
for (int i = 0; i < array.length; i )
{
debug.log("listtable遍历访问 " array[i]);
}
//检测是否是深拷贝
//更改最后一个数值
luatable[7] = 9999;
debug.log("-------------->luatable[7] " luatable[7]);
//获取arraytable2
luatable = callluamanager.instance().luastate.gettable("arraytable2");
object[] array2 = luatable.toarray();
for (int i = 0; i < array2.length; i )
{
debug.log("listtable遍历访问" array2[i]);
}
对应的lua内容:
--list/数组类型的table
arraytable = {2024,05,10,19,55,66,78}
arraytable2 = {"hello","lua",ture,123,88.88}
访问dictionary类型的table
在c#脚本中使用luatable来接受获取到的table,对于字典类型的table调用luatable的todicttable方法转成对应类型的luadicttable
类型,获取字典的迭代器对字典进行迭代遍历。
callluaentrance测试脚本中内容:
//4.2 字典类型的table数值获取
luatable = callluamanager.instance().luastate.gettable("dictable1");
debug.log("luatable[\"date\"] " luatable["date"]);
debug.log("luatable[\"name\"] " luatable["name"]);
debug.log("luatable[\"blog\"] " luatable["blog"]);
debug.log("luatable[\"webblog\"] " luatable["webblog"]);
luatable = callluamanager.instance().luastate.gettable("dictable2");
//转成luadicttable
// 因为键值对 各自的类型不统一 因此使用object
// 如果类型统一可以使用已知的
luadicttable
访问的lua脚本中数据:
--dictionary类型的table
dictable1 = {
["date"] = "2024/05/10",
["name"] = "tonychang",
["blog"] = "tonycode",
["webblog"] = "cnblogs",
}
dictable2 = {
[12] = 666,
[true] = 1,
[20.01] = "yes!",
["tony"] = "geeks",
}
最后总结一下:
在c#中调用lua中的table和函数,就是先使用luastate中方法获取到对应的函数或者table,之后根据获取的类型进行对应的解析访问。
一般我们调用一个具体的函数或者table时候,已经清楚其对应的类型,可以根据对应类型将table具体转换,之后访问使用。
此外发现,luatable中的是浅拷贝(索引指向同一个数值),即在获取到的luatable中更改数值其原数值也会改变。