Lua table用法


1.插入和删除函数

table.insert用于将一个元素插入到一个数组的指定位置,它会移动后续元素以空出空间。如果在调用table.insert时没有指定位置参数,则会将元素添加到数组末尾。

函数table.remove会删除并返回数组指定位置上的元素,并将该位置之后的所有元素前移,以填补空缺。如果在调用这个函数时不指定位置参数,它就会删除数组的最后一个元素。
local tb = {10, 20, 30}
table.insert(tb, 40) -- 在table的最后插入,结果为:{10, 20, 30, 40}
table.insert(tb, 2, 15) -- 在table的位置2插入,结果为:{10, 15, 20, 30, 40}


local tb = {10, 20, 30}
print(table.remove(tb)) -- 删除最后一个元素,并返回30;最后,tb = {10, 20}
print(table.remove(tb, 1)) -- 删除第一个元素并返回10;最后,tb = {20}


2.连接

table.concat可以完成数组的连接。它接受一个字符串数组,并返回这些字符串连接后的结果,它有一个可选参数,用于指定插到字符串之间的分隔符,同时这个函数另外还接受两个可选参数,用于指定第一个和最后一个要连接的字符串索引。
local tb = {"Jelly", "Think", "Is", "Good"}
local strTb = table.concat(tb, " ")
print(strTb)


3.排序 

table.sort 可以对一个数组进行排序,还可以指定一个可选的次序函数。这个次序函数有两个参数,如果希望第一个参数在排序结果中位于第二个参数值前,就应当返回true;如果没有提供这个函数,table.sort就使用默认的小于操作。
local tb = {20, 10, 2, 3, 4, 89, 20, 33, 2, 3}
table.sort(tb)  -- 默认是升序排序
table.sort(tb, function (a, b) if a > b then return true end end)  -- 修改为降序排序

—-==================================================================—

local tb = {x = 20, z = 10, y = 30, m = 2, n = 8} -- 这是一个key无序的table
table.sort(tb)  -- 如果想按照key的升序排列,下列代码是不起作用的
for k, v in pairs(tb) do
	print(k .. " = " .. v)
end

—- 正确做法是将这个table的所有key放入到一个数组中,对这个数组进行排序。
local tb = {x = 20, z = 10, y = 30, m = 2, n = 8} -- 这是一个key无序的table

local keyTb = {}
for k, _ in pairs(tb) do
	keyTb[#keyTb + 1] = k
end

table.sort(keyTb)

for _, v in ipairs(keyTb) do
	print(v .. " = " .. tb[v])
end

—-==================================================================—

--根据等级排序
local function testSort(a,b)
        return tonumber(a.level)> tonumber(b.level)
    end
table.sort(tableName,testSort)


--多条件排序,排列顺序优先级从高到低依次为:
--第一:等级由高到低;
--第二:稀有度由高到低;
--第三:伙伴ID从高到低。

local function sort_(a, b)
  local r
  local al = tonumber(a.level)
  local bl = tonumber(b.level)
  local aq = tonumber(a.data.quality)
  local bq = tonumber(b.data.quality)
  local aid = tonumber(a.pid)
  local bid = tonumber(b.pid)
  if  al == bl then
    if aq == bq then
      r = aid > bid
    else
      r = aq > bq
    end 
  else
    r = al > bl
  end
  return r
end

table.sort(tableName,sort_)

--以下代码是错误的:
local function testSort(a,b)
        return tonumber(a.level)>= tonumber(b.level)
    end







在使用 XLua 进行 Lua 表操作时,LuaTable 是一个非常重要的类,它提供了与 Lua 表进行交互的功能。XLua 是一个将 Lua 集成到 Unity 中的库,支持在 C# 中操作 Lua 表,从而实现两者之间的数据传递和逻辑调用。 LuaTable 提供了多种操作方法,包括创建表、读取表中的值、写入表中的值、以及遍历表内容等。例如,可以通过 LuaTable 的构造函数来创建一个新的 Lua 表,也可以通过 XLua 提供的 API 从 Lua 脚本中获取已有的表。在 C# 中,可以通过 Get 方法读取 Lua 表中的值,也可以通过 Set 方法设置表中的键值对。此外,LuaTable 支持遍历表中的键值对,可以通过 GetEnumerator 方法实现对表中元素的迭代访问。 以下是一个简单的示例,展示如何使用 XLuaLuaTable 创建和操作 Lua 表: ```csharp using XLua; public class LuaTableExample { private LuaEnv luaEnv = new LuaEnv(); public void CreateTable() { // 创建一个新的 LuaLuaTable table = luaEnv.NewTable(); // 设置表中的键值对 table.Set("key1", "value1"); table.Set("key2", 123); // 获取表中的值 string value1 = table.Get<string>("key1"); int value2 = table.Get<int>("key2"); // 遍历表中的键值对 using (var iter = table.GetIter()) { while (iter.Next()) { var key = iter.Key; var val = iter.Value; // 输出键值对 UnityEngine.Debug.Log($"Key: {key}, Value: {val}"); } } } } ``` 通过 LuaTable,开发者可以在 C# 中灵活地操作 Lua 表,从而实现更复杂的逻辑交互。这种机制在 Unity 开发中特别有用,特别是在需要动态配置或数据驱动的场景中 [^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值