说明:创建原生容器时通常需要指定参数类型,来确定容器内存放的数据类型
例如:
local array = TArray({ElementType})
local set = TSet({ElementType})
local map = TMap({KeyType}, {ValueType})
参数类型 示例 实际类型
boolean true Boolean
number 0 Interger
string "" String
table FVector Vector
userdata FVector(1,1,1) Vector
创建完成后,和原来的原生容器类型使用方式是相同的,更多接口可以参考源码:
TArray Plugins\UnLua\Source\UnLua\Private\BaseLib\LuaLib_Array.cpp
TSet Plugins\UnLua\Source\UnLua\Private\BaseLib\LuaLib_Set.cpp
TMap Plugins\UnLua\Source\UnLua\Private\BaseLib\LuaLib_Map.cpp
]]
local Screen = require "Tutorials.Screen"
local M = UnLua.Class()
local function print_intro()
local msg =
[[
使用以下按键执行各个示例,并在控制台查看输出:
数字1:TArray
数字2:TSet
数字3:TMap
—— 本示例来自 "Content/Script/Tutorials.06_NativeContainers.lua"
]] ..
"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
Screen.Print(msg)
end
function M:ReceiveBeginPlay()
print_intro()
end
local function dump_array(array)
local ret = {}
for i = 1, array:Length() do
table.insert(ret, array:Get(i))
end
return "[" .. table.concat(ret, ",") .. "]"
end
function M:One_Pressed()
print_intro()
Screen.Print("TArray")
print("========== TArray ==========")
print("注:索引从1开始")
local array = UE.TArray(0)
print("New: ", dump_array(array))
array:Add(1)
array:Add(2)
array:Add(3)
array:Add(3)
print("Add: ", dump_array(array))
local index = array:AddUnique(1)
print("AddUnique(1): ", dump_array(array), "Returns:", index)
array:Remove(1)
print("Remove(1): ", dump_array(array))
array:RemoveItem(3)
print("RemoveItem(3):", dump_array(array))
array:Insert(4, 1)
print("Insert(1, 4): ", dump_array(array))
array:Shuffle()
print("Shuffle(): ", dump_array(array))
array:Clear()
print("Clear: ", dump_array(array))
end
local function dump_set(set)
local array = set:ToArray()
local ret = {}
for i = 1, array:Length() do
table.insert(ret, array:Get(i))
end
return "(" .. table.concat(ret, ",") .. ")"
end
function M:Two_Pressed()
print_intro()
Screen.Print("TSet")
print("========== TSet ==========")
local set = UE.TSet(0)
print("New: ", dump_set(set))
set:Add(1)
set:Add(1)
set:Add(2)
set:Add(2)
set:Add(3)
set:Add(3)
print("Add: ", dump_set(set))
print("Length: ", set:Length())
print("Contains(3): ", set:Contains(3))
set:Clear()
print("Clear: ", dump_set(set))
end
local function dump_map(map)
local ret = {}
local keys = map:Keys()
for i = 1, keys:Length() do
local key = keys:Get(i)
local value = map:Find(key)
table.insert(ret, key .. ":" .. tostring(value))
end
return "{" .. table.concat(ret, ",") .. "}"
end
function M:Three_Pressed()
print_intro()
Screen.Print("TMap")
print("========== TMap ==========")
local map = UE.TMap(0, true)
print("New: ", dump_map(map))
map:Add(1, true)
map:Add(2, false)
map:Add(3, true)
print("Add: ", dump_map(map))
map:Remove(2)
print("Remove(2): ", dump_map(map))
local value = map:Find(3)
print("Find(3): ", dump_map(map), "Returns:", value)
map:Clear()
print("Clear: ", dump_map(map))
end
return M