LuaTable转C#的列表List和字典Dictionary
LuaTable转C#的列表List和字典Dictionaty
- 介绍
- lua中创建表测试
- lua中list表
- 表转成List
- 表转成Dictionary
- 键值对表
- 表转成Dictionary
- 多类型键值对表
- 表转成Dictionary
- 总结
介绍
之前基本都是从C#中的List或者Dictionary转成luaTable,很少会把LuaTable转成C#的List或者Dictionary,前几天正好做需求的时候要将lua里面的数据转成C#中的集合,C#List或者Dictionary转成luaTable的文章之前写过可以直接参考。
lua中创建表测试
lua中list表
注意luatable的数据是从1开始的 不是从0开始,这里默认的Key是1,2,3,4,5,6,7,8,9
--lua中的表this.testList = {1,2,3,4,5,6,7,8,9}--C#中//获取lua表LuaTable table = LuaManager.lua.GetTable("UIMainCityCtrl.testList");//lua表的长度打印Debug.LogError("table.Length = " + table.Length);//转换成数组打印object[] tabArray = table.ToArray();for (int i = 0; i < tabArray.Length; i++){Debug.LogError("tabArray[" + i + "] = " + tabArray[i]);}//使用luaTable直接打印for (int i = 0; i < table.Length; i++){Debug.LogError("table[" + (i + 1).ToString() + "] = " + table[(i + 1)]);}//上面的这两种打印的结果都是一样的。如果使用的是
打印如下所示:
表转成List
这两个方法本质上其实是一样的,LuaArrayTable可以理解成是对object[]的一层封装
方法一
object[] obj = table.ToArray();List<object> arr1 = new List<object>(obj);#region 打印一var iter = arr1.GetEnumerator();while (iter.MoveNext()){Debug.LogError("iter.Current = " + iter.Current);}#endregion#region 打印二arr1.ForEach((item) => {Debug.LogError("item = " + item);});#endregion
方法二
这里只是转换方法稍微变了一下,这里不多解释了,只是封装了一下
//LuaArrayTable luaArray = table.ToArrayTable(); 另一种转换方法LuaArrayTable luaArray = new LuaArrayTable(table);//LuaArrayTable的打印如下var iter = luaArray.GetEnumerator();while (iter.MoveNext()){ Debug.LogError("iter = " + iter.Current);}List<object> arr2 = new List<object>(luaArray);//简化下来可以这样List<object> arr2 = luaArray.ToList();
注意一点LuaArrayTable其实就是对List的一层封装,所以Key只能是Int
表转成Dictionary
//直接转成Object,object类型字典LuaDictTable<object, object> luaArray = table.ToDictTable<object, object>(); //Dictionary<object, object> dic = luaArray.ToDictionary(k => k.Key, v => v.Value);Dictionary<object, object> dic = luaArray.ToDictionary();//转成Int,Object类型的字典LuaDictTable<int, object> luaArray = table.ToDictTable<int, object>();//Dictionary<int, object> dic = luaArray.ToDictionary(k => k.Key, v => v.Value);Dictionary<int, object> dic = luaArray.ToDictionary();//转成int,int类型的字典LuaDictTable<int, int> luaArray = table.ToDictTable<int, int>(); //Dictionary<int, int> dic = luaArray.ToDictionary(k => k.Key, v => v.Value);Dictionary<int, int> dic = luaArray.ToDictionary();//转成int,string类型的字典LuaDictTable<int, string> luaArray = table.ToDictTable<int, string>(); //Dictionary<int, string> dic = luaArray.ToDictionary(k => k.Key, v => v.Value);Dictionary<int, string> dic = luaArray.ToDictionary();//打印代码var itor = dic.GetEnumerator();while (itor.MoveNext()){Debug.LogError("itor.Current.Key = " + itor.Current.Key + " ,itor.Current.Value = " + itor.Current.Value);}itor.Dispose();
打印如下
键值对表
键值对的这种表必然是无法转成list,既然是键值对只能转成字典Dictionary
--lua中--table表现的dictionarythis.testDic = {["1"] = 50,["a"] = 80,["3"] = 120,["b"] = 130}//C#中//获取lua表的另一种获取方法//LuaTable table = LuaManager.lua.GetTable("UIMainCityCtrl.testDic");//lua表的长度打印Debug.LogError("table.Length = " + table.Length);LuaDictTable dic = table.ToDictTable();//同上面的这个转换一样//LuaDictTable<string, object> dic = table.ToDictTable<string,object>();//转成value为int的键值对字典//LuaDictTable<string, int> dic = table.ToDictTable<string, int>();var itor = dic.GetEnumerator();while (itor.MoveNext()){Debug.LogError("itor.Current.Key = " + itor.Current.Key + " ,itor.Current.Value = " + itor.Current.Value);}itor.Dispose();
打印如下所示:
这里有一点是键值对方式的LuaTable是没有长度的,长度为0
表转成Dictionary
转换成字典的方式
//string,object类型字典LuaDictTable dic = table.ToDictTable();Dictionary<string, object> unitydic = dic.ToDictionary(k=>k.Key.ToString(),v => v.Value);//LuaDictTable<string, object> dic = table.ToDictTable<string, object>();//Dictionary<string, object> unitydic = dic.ToDictionary(); //string int类型字典LuaDictTable<string, int> dic = table.ToDictTable<string, int>();Dictionary<string, int> unitydic = dic.ToDictionary(); //打印如下var itor = unitydic.GetEnumerator();while (itor.MoveNext()){Debug.LogError("itor.Current.Key = " + itor.Current.Key + " ,itor.Current.Value = " + itor.Current.Value);}itor.Dispose();
多类型键值对表
表转成Dictionary
键值对的这种表必然是无法转成list,既然是键值对只能转成字典Dictionary
--lua中--table表现的dictionarythis.testDic = {["1"] = 1,[true] = 1,[false] = true,["123"] = false,[5] = "heiheihei"}//C#中//获取lua表的另一种获取方法//LuaTable table = LuaManager.lua.GetTable("UIMainCityCtrl.testDic");LuaDictTable<object,object> dic = table.ToDictTable<object, object>();Dictionary<object, object> unitydic = dic.ToDictionary(); var itor = unitydic.GetEnumerator();while (itor.MoveNext()){Debug.LogError("itor.Current.Key = " + itor.Current.Key + " ,itor.Current.Value = " + itor.Current.Value);}itor.Dispose();
总结
lua中的LuaTable、LuaArrayTable、LuaDictTable<K,V>这几个其实可以跟Unity中List和Dictionary相互转换。
后面会说一下距离怎么在C#中增删改查LuaTable、LuaArrayTable、LuaDictTable中的数据
相关文章:

LuaTable转C#的列表List和字典Dictionary
LuaTable转C#的列表List和字典Dictionaty 介绍lua中创建表测试lua中list表表转成List表转成Dictionary 键值对表表转成Dictionary 多类型键值对表表转成Dictionary 总结 介绍 之前基本都是从C#中的List或者Dictionary转成luaTable,很少会把LuaTable转成C#的List或者…...
Redis快速上手篇七(集群)
在赶工了..... Redis集群 主从复制的场景无法吗满足主机单点故障时需要引入集群配置 一般数据库要处理的读请求远大于写请求 ,针对这种情况,我们优化数据库可以采用读写分离的策略。我们可以部 署一台主服务器主要用来处理写请求,部署多台从…...

Mac 安装nvm
安装方案: 1. 从github下载nvm仓库到 ~/目录 地址:https://github.com/nvm-sh/nvm.git git clone https://github.com/nvm-sh/nvm.git 2. 进入nvm目录中执行install.sh等待执行完成,执行的操作方法就是直接将文件拖入到终端然后回车。 3.…...

python 从mssql取出datetime2类型之后格式化
我mssql是datetime2类型,用df取出之后发现是个纳秒的int(1698419713000000000 这种) 所以格式化的话就需要变成秒为单位,他们之间是10的9次方倍。所以先除以1e9之后用datetime.datetime.fromtimestamp()转换之后再format就行了 l…...

18.2 使用NPCAP库抓取数据包
NPCAP 库是一种用于在Windows平台上进行网络数据包捕获和分析的库。它是WinPcap库的一个分支,由Nmap开发团队开发,并在Nmap软件中使用。与WinPcap一样,NPCAP库提供了一些API,使开发人员可以轻松地在其应用程序中捕获和处理网络数据…...

pytest-yaml 测试平台-3.创建执行任务定时执行用例
前言 当项目用例编写完成后,需设置执行策略,可以用到定时任务设置每天几点执行。或者间隔几个小时执行一次。 创建定时任务 创建任务 勾选需要执行的项目以及运行环境 触发器可以支持2种方式:interval 间隔多久触发和 cron 表达式定时执行…...
安卓文件资源中,一个字串包含引用其他字串的写法
具体范例: <string name"product_name" translatable"false">Miscope</string><string name"app_name">string/product_name for USB Camera</string> 注意要先定义再引用。...

解决:谷歌浏览器访问http时,自动转https访问的问题
问题背景:某个系统网站,之前一直用https域名访问,现在改成http域名后,用http访问,谷歌浏览器会自动跳转到https。 解决方法: 在浏览器中输入网址:chrome://net-internals/#hsts -》 在“Delete…...

MQTT协议和边缘计算
1.基本概念 MQTT是基于TCP/IP协议栈构建的异步通信消息协议,是一种轻量级的发布、订阅信息传输协议。可以在不可靠的网络环境中进行扩展,适用于设备硬件存储空间或网络带宽有限的场景。使用MQTT协议,消息发送者与接收者不受时间和空间的限制…...

Redis(04)| 数据结构-压缩列表
压缩列表的最大特点,就是它被设计成一种内存紧凑型的数据结构,占用一块连续的内存空间,不仅可以利用 CPU 缓存,而且会针对不同长度的数据,进行相应编码,这种方法可以有效地节省内存开销。 但是,…...
516 最长回文子序列(区间DP)(灵神笔记)
题目 最长回文子序列 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。 示例 1: 输入:s …...

Kafka - 异步/同步发送API
文章目录 异步发送普通异步发送异步发送流程Code 带回调函数的异步发送带回调函数的异步发送流程Code 同步发送API 异步发送 普通异步发送 需求:创建Kafka生产者,采用异步的方式发送到Kafka broker 异步发送流程 Code <!-- https://mvnrepository…...
嵌套for循环在外层循环和内层循环中使用两个Executors.newCachedThreadPool缓存线程池执行操作
1. 首先,我们需要创建两个ExecutorService对象,这两个对象将作为我们的缓存线程池。 2. 然后,我们使用嵌套的for循环来执行我们的操作。在每个外层循环中,我们将创建一个新的任务并提交给外层线程池。在这个任务中,我…...

【uniapp+云函数调用】人脸识别,实人认证,适用于app,具体思路解析,已实现
2023.10.8 需求: uniapp开发的app项目中使用人脸识别 app项目都是第一次搞,更别提人脸识别了。目前已有的就是Dcloud账号已申请,实现需求的时间没那么紧迫 此篇会详细记录从0到1的过程 2023.10.24 今天开始探究实现的过程 可能会记录的有些冗余 效果图如下: uniapp开发指南…...
系列十六、bean有哪些生命周期的回调方法?有哪几种实现方式?
一、概述 bean的生命周期的回调方法主要分两种,一种是初始化时进行调用,另外一种是销毁时进行调用。但是不管是初始化还是销毁,都对应着三种方式。 二、实现方式 2.1、注解方式 PostConstruct PreDestroy Component public class UserSe…...

2023平台工程崭露头角,AI 带来新机遇与挑战
在今年,平台工程正在迅速在 IT 企业中崭露头角,成为软件开发团队的必要实践。根据 CloudBees 发布的最新报告《2023年平台工程:快速采纳和影响》,83%的受访者已经完全实施了平台工程,或正处于某种实施阶段。 平台工…...
如何使用python快速修改Excel表单中的大量数据
python修改Excel中的内容进阶加速版 前面有一篇文章讲到了使用python处理Excel中的数据文件,即修改Excel中的数据,但是那个版本的代码跑点小规模、小数据量的excel还行,一旦数据量达到万条级别,代码运行会非常慢!因此&…...

✔ ★【备战实习(面经+项目+算法)】 10.27学习
✔ ★【备战实习(面经项目算法)】 坚持完成每天必做如何找到好工作1. 科学的学习方法(专注!效率!记忆!心流!)2. 每天认真完成必做项,踏实学习技术 认真完成每天必做&…...

视频分辨率/帧率/码率选择参考
1. 视频码率与分辨率的参考表 1080*720的分辨率,用5000K左右; 720*576的分辨率,用3500K左右; 640*480的分辨率,用1500K左右。 2. 计算公式 基本算法:码率(kb…...
LeetCode75——Day18
文章目录 一、题目二、题解 一、题目 1732. Find the Highest Altitude There is a biker going on a road trip. The road trip consists of n 1 points at different altitudes. The biker starts his trip on point 0 with altitude equal 0. You are given an integer …...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...