UH2S2L7——表映射到List和Dictionary

  • List

    • 一般用来映射没有自定义索引的表
    • 确定类型,指定类型即可
    • 不确定类型,用object
  • Dictionary

    • 一般用来映射有自定义索引的表
    • 确定类型,指定类型即可
    • 不确定类型,用object
  • 他们都是值拷贝 改变他们 不会影响lua中的表

表映射List

List​一般用来映射没有自定义索引的表,确定类型就指定类型,若不确定类型就用object

先在Lua脚本声明如下内容

1
2
3
--List
TestList = {1, 2, 3, 4, 5, 6} -- 相同类型列表
TestList2 = {"123", "123", true, 1, 1.2} -- 不定类型列表

固定类型的列表,可以直接如调用全局变量那样获取它

1
2
3
4
5
6
7
8
9
10
void Start()
{
LuaManager.Instance.Init();
LuaManager.Instance.DoLuaFile("Main");
List<int> list = LuaManager.Instance.Global.Get<List<int>>("TestList");
for (int i = 0; i < list.Count; i++)
{
Debug.Log(list[i]);
}
}

image

这样获取到的列表是深拷贝,或者说值拷贝,修改该列表无法影响Lua中表的内容

不确定类型的列表,同样可以直接如调用全局变量那样获取它,只是需要使用List<Object>去装载它

1
2
3
4
5
List<object> list2 = LuaManager.Instance.Global.Get<List<object>>("TestList2");
for (int i = 0; i < list2.Count; i++)
{
Debug.Log(list2[i]);
}

表映射到Dictionary

Dictionary​一般用来映射有自定义索引的表,确定类型就指定类型,若不确定类型就用object

先在Lua脚本声明如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
--Dictionary
TestDic = {
["1"] = 1,
["2"] = 2,
["3"] = 3,
["4"] = 4,
} -- 固定类型字典

TestDic2 = {
["1"] = 1,
[true] = 1,
[false] = true,
["123"] = false
} -- 不定类型字典

固定类型的字典,可以直接如调用全局变量那样获取它

1
2
3
4
5
Dictionary<string, int> dic = LuaManager.Instance.Global.Get<Dictionary<string, int>>("TestDic");
foreach (string item in dic.Keys)
{
Debug.Log(item + "_" + dic[item]);
}

这样获取到的字典依然是深拷贝,或者说值拷贝,修改该字典无法影响Lua中表的内容

不确定类型的字典,同样可以直接如调用全局变量那样获取它,只是需要使用Dictionary<object, object>去装载它

1
2
3
4
5
Dictionary<object, object> dic2 = LuaManager.Instance.Global.Get<Dictionary<object, object>>("TestDic2");
foreach (var item in dic2.Keys)
{
Debug.Log(item + "_" + dic2[item]);
}