当前位置: 首页 > news >正文

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&#xff0c;很少会把LuaTable转成C#的List或者…...

Redis快速上手篇七(集群)

在赶工了..... Redis集群 主从复制的场景无法吗满足主机单点故障时需要引入集群配置 一般数据库要处理的读请求远大于写请求 &#xff0c;针对这种情况&#xff0c;我们优化数据库可以采用读写分离的策略。我们可以部 署一台主服务器主要用来处理写请求&#xff0c;部署多台从…...

Mac 安装nvm

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

python 从mssql取出datetime2类型之后格式化

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

18.2 使用NPCAP库抓取数据包

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

pytest-yaml 测试平台-3.创建执行任务定时执行用例

前言 当项目用例编写完成后&#xff0c;需设置执行策略&#xff0c;可以用到定时任务设置每天几点执行。或者间隔几个小时执行一次。 创建定时任务 创建任务 勾选需要执行的项目以及运行环境 触发器可以支持2种方式&#xff1a;interval 间隔多久触发和 cron 表达式定时执行…...

安卓文件资源中,一个字串包含引用其他字串的写法

具体范例&#xff1a; <string name"product_name" translatable"false">Miscope</string><string name"app_name">string/product_name for USB Camera</string> 注意要先定义再引用。...

解决:谷歌浏览器访问http时,自动转https访问的问题

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

MQTT协议和边缘计算

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

Redis(04)| 数据结构-压缩列表

压缩列表的最大特点&#xff0c;就是它被设计成一种内存紧凑型的数据结构&#xff0c;占用一块连续的内存空间&#xff0c;不仅可以利用 CPU 缓存&#xff0c;而且会针对不同长度的数据&#xff0c;进行相应编码&#xff0c;这种方法可以有效地节省内存开销。 但是&#xff0c;…...

516 最长回文子序列(区间DP)(灵神笔记)

题目 最长回文子序列 给你一个字符串 s &#xff0c;找出其中最长的回文子序列&#xff0c;并返回该序列的长度。 子序列定义为&#xff1a;不改变剩余字符顺序的情况下&#xff0c;删除某些字符或者不删除任何字符形成的一个序列。 示例 1&#xff1a; 输入&#xff1a;s …...

Kafka - 异步/同步发送API

文章目录 异步发送普通异步发送异步发送流程Code 带回调函数的异步发送带回调函数的异步发送流程Code 同步发送API 异步发送 普通异步发送 需求&#xff1a;创建Kafka生产者&#xff0c;采用异步的方式发送到Kafka broker 异步发送流程 Code <!-- https://mvnrepository…...

嵌套for循环在外层循环和内层循环中使用两个Executors.newCachedThreadPool缓存线程池执行操作

1. 首先&#xff0c;我们需要创建两个ExecutorService对象&#xff0c;这两个对象将作为我们的缓存线程池。 2. 然后&#xff0c;我们使用嵌套的for循环来执行我们的操作。在每个外层循环中&#xff0c;我们将创建一个新的任务并提交给外层线程池。在这个任务中&#xff0c;我…...

【uniapp+云函数调用】人脸识别,实人认证,适用于app,具体思路解析,已实现

2023.10.8 需求: uniapp开发的app项目中使用人脸识别 app项目都是第一次搞,更别提人脸识别了。目前已有的就是Dcloud账号已申请,实现需求的时间没那么紧迫 此篇会详细记录从0到1的过程 2023.10.24 今天开始探究实现的过程 可能会记录的有些冗余 效果图如下: uniapp开发指南…...

系列十六、bean有哪些生命周期的回调方法?有哪几种实现方式?

一、概述 bean的生命周期的回调方法主要分两种&#xff0c;一种是初始化时进行调用&#xff0c;另外一种是销毁时进行调用。但是不管是初始化还是销毁&#xff0c;都对应着三种方式。 二、实现方式 2.1、注解方式 PostConstruct PreDestroy Component public class UserSe…...

2023平台工程崭露头角,AI 带来新机遇与挑战

在今年&#xff0c;平台工程正在迅速在 IT 企业中崭露头角&#xff0c;成为软件开发团队的必要实践。根据 CloudBees 发布的最新报告《2023年平台工程&#xff1a;快速采纳和影响》&#xff0c;83%的受访者已经完全实施了平台工程&#xff0c;或正处于某种实施阶段。 平台工…...

如何使用python快速修改Excel表单中的大量数据

python修改Excel中的内容进阶加速版 前面有一篇文章讲到了使用python处理Excel中的数据文件&#xff0c;即修改Excel中的数据&#xff0c;但是那个版本的代码跑点小规模、小数据量的excel还行&#xff0c;一旦数据量达到万条级别&#xff0c;代码运行会非常慢&#xff01;因此&…...

✔ ★【备战实习(面经+项目+算法)】 10.27学习

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

视频分辨率/帧率/码率选择参考

1. 视频码率与分辨率的参考表 1080&#xff0a;720的分辨率&#xff0c;用5000K左右&#xff1b; 720&#xff0a;576的分辨率&#xff0c;用3500K左右&#xff1b; 640&#xff0a;480的分辨率&#xff0c;用1500K左右。 2. 计算公式 基本算法&#xff1a;码率&#xff08;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 …...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...