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表现的dictionary
    this.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表现的dictionary
    this.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中的数据

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

.net core webapi 大文件上传到wwwroot文件夹

1.配置staticfiles(program文件中) app.UseStaticFiles();2.在wwwroot下创建upload文件夹 3.返回结果封装 namespace webapi;/// <summary> /// 统一数据响应格式 /// </summary> public class Results<T> {/// <summary>/// 自定义的响应码&#xff…

基于Flask、MySQL和Echarts的*市CPI和物价水平数据可视化分析

基于Flask、MySQL和Echarts的*市CPI和物价水平数据可视化分析 引言&#xff1a; 在当前社会经济背景下&#xff0c;CPI&#xff08;居民消费价格指数&#xff09;和物价水平的波动对市场和居民生活产生直接影响。本文将介绍一款基于Flask、MySQL和Echarts的数据可视化系统&…

Nature 新研究发布,GPT 驱动的机器人化学家能够自行设计和进行实验,这对科研意味着什么?

文章目录 前言揭秘Coscientist不到四分钟&#xff0c;设计并改进了程序能力越大&#xff0c;责任越大 前言 有消息称&#xff0c;AI 大模型 “化学家” 登 Nature 能够自制阿司匹林、对乙酰氨基酚、布洛芬&#xff0c;甚至连复杂的钯催化交叉偶联反应&#xff0c;也能完成。 …

20231222给NanoPC-T4(RK3399)开发板的适配Android11的挖掘机方案并跑通AP6398SV

20231222给NanoPC-T4(RK3399)开发板的适配Android11的挖掘机方案并跑通AP6398SV 2023/12/22 7:54 简略步骤&#xff1a;rootrootrootroot-X99-Turbo:~/3TB$ cat Android11.0.tar.bz2.a* > Android11.0.tar.bz2 rootrootrootroot-X99-Turbo:~/3TB$ tar jxvf Android11.0.tar.…

『OPEN3D』1.1 点云处理

目录 1.open3d中的点云IO 2.点云的可视化 3 点云voxel下采样 4. 顶点法线估计 5.最小外界矩 6. 凸包计算 7. 点云距离计算 8. DBSCAN clustering聚类 9. RANSAC(Random Sample Consensus) 10. 点云平面分割 11. 隐藏点移除 12.outliers移除 13 最远点采样&#xf…

安全、高效的MySQL DDL解决方案

MySQL作为目前应用最广泛的开源关系型数据库&#xff0c;是许多网站、应用和商业产品的主要数据存储。在生产环境&#xff0c;线上数据库常常面临着持续的、不断变化的表结构修改&#xff08;DDL&#xff09;&#xff0c;如增加、更改、删除字段和索引等等。其中一些DDL操作在M…

Vue3中的混入(mixins)

本文主要介绍Vue3中的混入&#xff08;mixins&#xff09;。 目录 一、在普通写法中使用混入&#xff1a;二、在setup写法中使用混入&#xff1a; 混入是Vue中一种用于在组件中共享可复用功能的特性。在Vue 3中&#xff0c;混入的使用方式有所改变。 一、在普通写法中使用混入…

MongoDB安装部署

二、安装部署 2.1 下载 下载地址&#xff1a;MongoDB Enterprise Server Download | MongoDB 当前最新版本6.0.9&#xff0c;5.0.9对Mac m1需要centos 8.2版本。选择docker安装。 2.2 docker-ce安装 # 安装docker # 默认repo源没有docker-ce安装包&#xff0c;需要新的rep…

Station_Map1221Update

1221 Polish 1. Transfer the road coordinates from the UE coordinates system into the CAD coordinates system by using the functions in the file INDEX2UE.py Report Changes in the function initialMatrix # 初始化标签self.outdoor_label[self.wall_matrix 1] …

如何使用树莓派Bookworm系统中配置网络的新方法NetworkManager

树莓派在 10 月新出的 Bookworm 版本系统中&#xff0c;将使用多年的 dhcpcd 换成了 NetworkManager&#xff08;以前是在rasp-config中可选&#xff09;&#xff0c;这是因为 Raspberry Pi OS 使用的是 Debian 内核&#xff08;和 Ubuntu 一样&#xff09;&#xff0c;所以树莓…

前端常用的开发工具

前端常用的开发工具&#x1f516; 文章目录 前端常用的开发工具&#x1f516;1. Snipaste--截图工具2. ScreenToGif--gif图片录制3. Typora--Markdown编辑器4. notepad--文本代码编辑器5. uTools--多功能工具6. EV录屏--录屏软件7. Xmind--思维导图8. Apifox -- 接口调试9. Tor…

Keil中文报错提示为: [-Winvalid-source-encoding]问题解决

错误提示&#xff1a; ../User/main.c(67): warning: illegal character encoding in string literal [-Winvalid-source-encoding]67 | printf("全<B2><BF><B4><AB><CA><E4><CD><EA><B3><C9…

Redis高并发缓存设计问题与性能优化

Redis高并发缓存设计问题与性能优化 缓存设计典型问题缓存穿透缓存失效(击穿)缓存雪崩热点缓存key重建优化缓存与数据库双写不一致 开发规范与性能优化一、键值设计1. key名设计2. value设计big key的危害&#xff1a;1.导致redis阻塞2.网络拥塞3. 过期删除 big key的产生&…

大白鲨生成Windows木马(仅供参考不可实践)

一、学习方法 一个正确的学习方法往往比学习更为重要 方法一&#xff1a;学习技术的本质性作用 &#xff08;第一性定律&#xff09; — 帮助我们解决的问题是什么 — 产生的原因/价值 方法二&#xff1a;在工作中到底如何使用&#xff1f; 方法三&#xff1a;技术是由人…

PyQt6 QTimer计时器控件

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计52条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

AI日报:2024年人工智能对各行业初创企业的影响

欢迎订阅专栏 《AI日报》 获取人工智能邻域最新资讯 文章目录 2024年人工智能对初创企业的影响具体行业医疗金融服务运输与物流等 新趋势 2024年人工智能对初创企业的影响 2023年见证了人工智能在各个行业的快速采用和创新。随着我们步入2024年&#xff0c;人工智能初创公司正…

Linuxapache安装

Apache 介绍 Apache HTTP Server&#xff08;简称Apache&#xff09;是Apache软件基金会的一个开放源码的网页服务器&#xff0c;Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上&#xff0c;由于其跨平台和安全性被广泛使用&#xff0…

【数据库系统概论】第3章-关系数据库标准语言SQL(2)

文章目录 3.4 数据查询3.4.1 单表查询3.4.2 连接查询3.4.3嵌套查询3.4.4 集合查询3.4.5 基于派生表的查询3.4.6 select 语句的目标列 3.4 数据查询 格式 SQL执行顺序 3.4.1 单表查询 基础查询 select * from student // 不重复 select distinct sname from student // 命名…

动态规划算法练习题

45. 跳跃游戏 II 中等 2K 相关企业 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j &…

LTE之物理信道

信道是不同类型的信息&#xff0c;按照不同传输格式、用不同的物理资源承载的信息通道。根据信息类型的不同、处理过程的不同可将信道分为多种类型。 重点介绍LTE的逻辑信道、传输信道、物理信道等常见的信道类型&#xff0c;并和3G相应的信道类型作了比较&#xff0c;通过比较…