跳到主要内容

数组

通过 zlua 创建 szarrayT[])与 mdarray,在 Lua 中按 C# 语义索引。泛型集合(List<T> 等)见 泛型

一维数组 T[]

-- 方式 A:元素类型 + 长度
local arr = zlua.new_szarray_by_element_type(zlua.types.int32, 4)

-- 方式 B:先构造数组类型
local IntArray = zlua.make_szarray_type(zlua.types.int32)
local arr2 = zlua.new_szarray_by_szarray_type(IntArray, 4)

arr[0] = 10 -- 0 基,与 C# 一致
arr[1] = 20
print(#arr) -- Length

引用类型元素可为 nil。越界与 C# 相同。

与 Lua 表互转

local t = zlua.to_table(arr) -- Lua 表 1-based ↔ C# 0-based

-- blittable 元素 → 二进制 string(整段内存拷贝)
-- 如 byte[] / float[] / Vector3[](struct 无引用字段)
local bytes = zlua.to_bytes(float_arr)

to_bytes 要求元素 blittable(基元或无引用字段的 struct);细则见 zlua 库规范

多维数组

local IntMatrix = zlua.make_mdarray_type(zlua.types.int32, 2)
local matrix = zlua.new_mdarray_by_mdarray_type(
IntMatrix,
{0, 0}, -- lowbounds
{3, 4} -- sizes
)
-- mdarray 无 # ;用 GetLength 等

typeArg

zlua.types.int32zlua.typeof(typeTable)zlua.get_type_from_name("System.Int32")、已解析类型表均可作为元素类型实参。更多见 常用 zlua 库

常见错误

现象处理
数组越界使用 0 .. Length-1
# 对 mdarray 无效GetLength(dimension)
to_bytes 失败元素非 blittable

学习路径

上一篇Function 与 Delegate
下一篇泛型

相关文档