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中的数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/119135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入浅出排序算法之简单选择排序

目录 1. 原理和执行流程 2. 代码实现 3. 性能分析 4. 双向选择排序&#xff08;了解&#xff09; 1. 原理和执行流程 选择排序包含了堆排序和简单选择排序。 每一次从无序区间选出最大&#xff08;或最小&#xff09;的一个元素&#xff0c;存放在无序区间的最后&#xff0…

道路数据汇总,全国(2021年+2022年)+重点城市(深圳、上海、武汉、杭州、广州、南京、东莞),格式有shp+xlsx

昨天推了上海道路数据&#xff0c;今天把已收集到的道路数据打包推给大家&#xff0c;后续有新数据会持续更新&#xff01; 废话不多说&#xff0c;先给数据地址再介绍数据情况&#xff1a; 2021年全国道路数据&#xff1a; 2021年全国道路数据https://www.xcitybox.com/dat…

uni-app医院智能导诊系统源码

随着科技的迅速发展&#xff0c;人工智能已经逐渐渗透到我们生活的各个领域。在医疗行业中&#xff0c;智能导诊系统成为了一个备受关注的应用。本文将详细介绍智能导诊系统的概念、技术原理以及在医疗领域中的应用&#xff0c;分析其优势和未来发展趋势。 智能导诊系统通过人工…

迭代器的封装与反向迭代器

一、反向迭代器 在list模拟实现的过程中&#xff0c;第一次接触了迭代器的封装&#xff0c;将list的指针封装成了一个新的类型&#xff0c;并且以迭代器的基本功能对其进行了运算符重载 反向迭代器是对正向迭代器的封装&#xff0c;并且体现了泛型编程的思想&#xff0c;任意…

如何在 openSUSE 中使用 Zypper Configuration 设置代理

如何在 openSUSE 中使用 Zypper Configuration 设置代理 首先&#xff0c;确定问题&#xff1a;设置代理服务器以便 Zypper 能够访问互联网并下载软件包。 亲身经验&#xff1a;我曾在使用 openSUSE 时遇到过类似问题&#xff0c;通过设置代理服务器成功解决。 数据和引证&…

C++初阶:C/C++内存管理

一.C/C内存分布 先来回顾一下C语言内存分区示意图如下&#xff1a; 代码区&#xff1a; 程序执行代码一般存放在代码区&#xff0c;字符串常量以及define定义的常量也可能存放在代码区。 常量区&#xff1a; 字符串&#xff0c;数字等常量以及const修饰的全局变量往往存放在…

day51 --动态规划10

121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 第一题&#xff1a;买卖股票的最佳时机 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出…

员工福利平台设计方案

需求背景&#xff1a; 1、杭州行政希望给员工有一个福利平台&#xff0c;可以通过该福利平台&#xff0c;一方面可以结合公司周围的实体店&#xff0c;给到员工一些福利的商品&#xff0c;员工可以自行去这些商家进行消费。 2、公司可以通过福利平台&#xff0c;给员工账户进…

K8s 部署 CNI 网络组件+k8s 多master集群部署+负载均衡

------------------------------ 部署 CNI 网络组件 ------------------------------ ---------- 部署 flannel ---------- K8S 中 Pod 网络通信&#xff1a; ●Pod 内容器与容器之间的通信 在同一个 Pod 内的容器&#xff08;Pod 内的容器是不会跨宿主机的&#xff09;共享同一…

实验六:DHCP、DNS、Apache、FTP服务器的安装和配置

1. (其它) 掌握Linux下DHCP、DNS、Apache、FTP服务器的安装和配置&#xff0c;在Linux服务器上部署JavaWeb应用 完成单元八的实训内容。 1、安装 JDK 2、安装 MySQL 3、部署JavaWeb应用 安装jdk 教程连接&#xff1a;linux安装jdk8详细步骤-CSDN博客 Jdk来源&#xff1a;linu…

【Django 05】Django-DRF(ModelViewSet)、路由组件、自定义函数

1. Django-DRF&#xff08;ModelViewSet&#xff09; 1.1 DRF是什么&#xff1f; ModelViewSet 是 Django REST framework 提供的一个视图集类&#xff0c;它封装了常见的模型操作方法。 模型类提供了默认的增删改查功能。 它继承自 GenericViewSet、ListModelMixin、Retri…

基于pyenv和virtualenv搭建python多版本虚拟环境

pyenv简介 由于Python的依赖是基于site的&#xff0c;这对于生产环境来说&#xff0c;是一种简单而正确的方式&#xff0c;然而&#xff0c;对于我们的开发环境&#xff0c;基于这样的管理方式&#xff0c;带来了可怕的第三方依赖管理的难题&#xff0c;virtualenv适时出现了&a…

Altium Designer布局技巧

资料 快捷键 PCB导入原理图 验证工程 导入原理图 进入PCB编辑界面&#xff0c;设计→Import Changes from xxxx 多原理图多PCB 创建多个原理图、PCB 略反键点击原理图 勾选高级 选择原理图及目标PCB&#xff0c;点击确定 右键点击列表项&#xff0c;更新原理图&#xff0…

手机桌面待办事项APP推荐

每天&#xff0c;我们每个人都面临着繁琐的事务和任务&#xff0c;而手机成了我们日常生活中不可或缺的伙伴。手机上的待办事项工具像一个可靠的助手&#xff0c;可以帮助我们更好地记录、管理和完成任务。在手机桌面上使用的待办事项APP推荐用哪一个呢&#xff1f; 手机是我们…

服务容错框架Sentinel入门

概述 Sentinel&#xff0c;阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。分布式系统的流量防卫兵。 特征: 丰富的应用场景&#xff1a;秒杀&#xff08;即突发流量控制在系统…

更加轻松处理相同文件名!覆盖复制操作全新升级,避免重复命名!

亲爱的用户&#xff0c;您是否在进行覆盖复制操作时&#xff0c;常常因为相同的文件名而无法正常完成任务&#xff1f;现在&#xff0c;我们为您推出了全新的覆盖复制升级版&#xff0c;让您更加轻松处理相同文件名&#xff0c;避免重复命名的尴尬局面&#xff01; 首先第一步…

el-date-picker如何回显

后端传输过来起止时间&#xff0c;需要回显在 el-date-picker中 未修改前的代码&#xff1a; 问题整改&#xff1a;需要将时间转换为Date类型 修改后的代码 setTime(date){if (date!null){this.value.push(new Date(date.startTime))this.value.push(new Date(date.endTime))c…

C++智能指针[下](shared_ptr/weak_ptr/循环引用/删除器)

文章目录 4.智能指针[shared_ptr]4.1设计理念成员属性 4.2主要接口拷贝构造 4.3引用计数线程安全问题测试线程安全通过对计数引用的加锁保护使得类线程安全类实例化的对象使用时需要手动加锁保护 "锁"的引进线程引用传参问题 4.4整体代码 5.循环引用问题5.1问题的引入…

项目管理中,如何建立里程碑式管理?

项目进度控制是项目管理中的重要环节&#xff0c;也是最具挑战性的工作之一。在项目管理中&#xff0c;项目进度失控受到多种因素的影响&#xff0c;导致项目失控。 为了解决这个问题&#xff0c;我们可以借鉴在旅途中学到的经验&#xff0c;通过设立里程碑来了解项目进度&am…

MSQL系列(九) Mysql实战-Join算法底层原理

Mysql实战-Join算法底层原理 前面我们讲解了BTree的索引结构&#xff0c;及Mysql的存储引擎MyISAM和InnoDB,今天我们来详细讲解下Mysql的查询连接Join的算法原理 文章目录 Mysql实战-Join算法底层原理1.Simple Nested-Loop Join 简单嵌套循环2.Block Nested-Loop Join 块嵌套…