UE5中的DataTable说明

创建DataTable

        在编辑器中创建

        在文件夹空白处右击,选择Miscellaneous/DataTable,如图:

        使用代码创建

// 创建DataTable实例
UDataTable* MyDataTable = NewObject();
// 创建一个行结构体
UStruct* RowStruct = UStruct::CreateEmpty();
// 添加两个属性到结构体
FStructProperty* Property1 = FStructProperty::Create(RowStruct, TEXT("Property1"), EPropertyFlags::CPF_Edit);
FStructProperty* Property2 = FStructProperty::Create(RowStruct, TEXT("Property2"), EPropertyFlags::CPF_Edit);
// 更新结构体
RowStruct->StaticLink(true);
// 设置行结构体
MyDataTable->RowStruct = RowStruct;

在DataTable中添加行数据

        有了DataTable的结构或者类型定义后,接下来您需要添加数据。以下是示例代码:

// 获取DataTable并检查是否有效
UDataTable* MyDataTable = LoadObject(nullptr, TEXT("DataTable'/Game/Data/MyDataTable.MyDataTable'"));if (MyDataTable)
{// 创建行数据实例FMyRowData MyRow;// 设置行数据MyRow.Property1 = FString(TEXT("Value"));MyRow.Property2 = 10;// 添加行数据MyDataTable->AddRow(TEXT("RowName"), MyRow);
}

结构体选取

        UE中的结构体选取是定义DataTable中行数据的非常常用的方法。结构体选取可以用来设计更复杂的数据结构,比如嵌套结构体。以下是结构体选取的示例:

// 定义一个结构体属性
FStructProperty* StructProperty = CastField(MyDataTable->RowStruct->FindPropertyByName(TEXT("Property1")));
// 获取结构体属性值
FMyRowData MyRowData = MyDataTable->GetRow(TEXT("RowName"));
FString PropertyValue = StructProperty->GetPropertyValue_InContainer(&MyRowData)->ToString();

从CSV文件中导入数据

        导入CSV文件到DataTable可以帮您提高生产效率,特别是当数据非常大时。以下是从CSV文件中导入DataTable数据的示例:

// 打开CSV文件
FString FilePath = FString(TEXT("Data/MyData.csv"));
FString FileContent;
FFileHelper::LoadFileToString(FileContent, *FilePath);
// 将CSV文件解析为FDataTableImporterCSV类型
FDataTableImporterCSV DataTableImporterCSV(*FileContent);
// 导入数据到DataTable
MyDataTable->CreateTableFromCSVString(FileContent);

从DataTable导出数据

        从DataTable中导出数据可以让您将数据放到一个易于处理的格式中,比如一个文本或者XML文件。以下是从DataTable导出数据的示例:

// 从DataTable中获取行数据
FMyRowData* RowData = MyDataTable->FindRow(TEXT("RowName"), FString(""), true);
// 使用JSON格式序列化行数据并保存到文件
FString JsonString;
FJsonObjectConverter::UStructToJsonObjectString(RowData, JsonString);
FString FilePath = FString(TEXT("Data/MyData.json"));
FFileHelper::SaveStringToFile(JsonString, *FilePath);

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

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

相关文章

[Flink01] 了解Flink

Flink入门系列文章主要是为了给想学习Flink的你建立一个大体上的框架,助力快速上手Flink。学习Flink最有效的方式是先入门了解框架和概念,然后边写代码边实践,然后再把官网看一遍。 Flink入门分为四篇,第一篇是《了解Flink》&…

【HarmonyOS】鸿蒙开发之Button组件——第3.4章

按钮类型 Capsule(默认值):胶囊类型 Button("默认样式").height(40)//高度.width(90)//宽度.backgroundColor(#aabbcc)//背景颜色运行结果: Normal:矩形按钮,无圆角 Button({type:ButtonType.Normal}){Te…

kali无线渗透之蓝牙原理与探测与侦听

“传统蓝牙”规范在2.4GHz的ISM波段上定义了79个信道,每个信道有1MHz的带宽。设备在这些信道中以每秒1600次的频率进行跳转,换句话说,就是每微秒625次跳转。这项信道跳转技术被称为“跳频扩频”(Frequency HoppingSpread Spectrum&#xff0c…

数据结构-邻接矩阵的创建与遍历

上篇文章已经介绍了邻接矩阵的具体作用与如果利用邻接矩阵寻找相邻顶点,这次介绍重点为邻接矩阵的创建与两种遍历方式 邻接矩阵的创建 其结构体需要能记录顶点、顶点数、边数及邻接矩阵,即 #define max 100 typedef struct {int vex[max];//顶点(假设…

FPGA转行ISP的探索之二:技术路线和概念

ISP领域的概念 1 相机方面的概念 1)DENOISE,图像去噪 图像噪声按噪声与信号的关系可分为加性噪声和乘性噪声;按照产生原因可分为外部噪声和内部噪声;按照统计特性可分为平稳噪声和非平稳噪声;平稳噪声基于统计后的概…

【C++搜索】BFS:走迷宫

题目描述 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。 给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着…

wsl内置Ubuntu使用 Dinky 与 Flink 集成

Dinky 与 Flink 集成 说明 本文档介绍 Dinky 与 Flink 集成的使用方法, 如果您是 Dinky 的新用户, 请先阅读 本文档, 以便更好的搭建 Dinky 环境 如果您已经熟悉 Dinky 并已经部署了 Dinky, 请跳过本文档的前置要求部分, 直接阅读 Dinky 与 Flink 集成部分 注意: 本文档基…

MinGW编译OpenCV4.5(64位/32位通用,附编译完成包下载)

MinGW编译OpenCV4.5(64位/32位通用,附编译完成包下载) MinGW编译OpenCV4.5

MySQL高级特性篇(3)-全文检索的实现与优化

MySQL数据库全文检索是指对数据库中的文本字段进行高效地搜索和匹配。在MySQL数据库中,可以使用全文检索来实现快速的文本搜索功能,并且可以通过一些优化手段提高全文检索的性能。 一、MySQL全文检索的基本概念 全文检索是一种将关键字搜索与自然语言处…

JAVA面试框架篇

1. Spring refresh 流程 要求 掌握 refresh 的 12 个步骤 Spring refresh 概述 refresh 是 AbstractApplicationContext 中的一个方法,负责初始化 ApplicationContext 容器,容器必须调用 refresh 才能正常工作。它的内部主要会调用 12 个方法&#x…

单主模式和多主模式切换

1 组复制模式切换注意点 组复制有两种运行模式,一种是单主模式,一种是多主模式。这个模式是在整个组中设置的,由 group_replication_single_primary_mode 这个系统变量指定,而且在所有成员上必须保持一致。ON 表示单主模式&#…

禁止电子邮箱地址登录WordPress后台的插件No Login by Email Address

WordPress 4.5及之后的版本增加了使用注册用户的电子邮件地址代替用户名登录的功能,但是大多数个人站长的管理员邮箱地址都是固定,而且到其他站点进行评论留言也是同一个邮箱地址,很容易给一些别有用心的可乘之机,所以禁止WordPre…

(AtCoder Beginner Contest 341)(A - D)

比赛地址 : Tasks - Toyota Programming Contest 2024#2&#xff08;AtCoder Beginner Contest 341&#xff09; A . Print 341 模拟就好了 &#xff0c; 先放一个 1 , 然后放 n 个 01 ; #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout…

【Effective Objective - C 2.0】——读书笔记(五)

文章目录 二十九、理解引用计数三十、以ARC简化引用计数三十一、在dealloc方法中只释放引用并解除监听三十二、编写异常安全代码时留意内存管理问题三十三、以弱引用避免保留环三十四、以”自动释放池块“降低内存峰值三十五、用"僵尸对象"调试内存管理问题三十六、不…

C++知识点总结(15):选择排序、插入排序

文章目录 一、选择排序1. 概念2. 伪代码3. 程序4. 例题第k大的数 二、元素插入1. 伪代码2. 程序 三、插入排序1. 概念2. 伪代码3. 程序4. 例题洛谷 P1152 四、分析 一、选择排序 1. 概念 下标12345最小值原始43521/第一次135241第二次125342第三次123543第四次123454完成1234…

C++ 调用js 脚本

需求&#xff1a; 使用Qt/C 调用js 脚本。Qt 调用lua 脚本性能应该是最快的&#xff0c;但是需要引入第三方库&#xff0c;虽然也不是特别麻烦&#xff0c;但是调用js脚本&#xff0c;确实内置的功能&#xff08;C 调用lua 脚本-CSDN博客&#xff09; 步骤&#xff1a; 1&…

解决elementUI固定列后,下方多了一条横线的问题

最近遇到一个bug,如下图,el-table的操作列使用fixed属性固定后,下方多了一条横线: 我们将样式设置高优先,以覆盖内联样式,如下是less里使用穿透样式解决的办法: <style lang="less" scoped> /deep/ .el-table__fixed-right {height: 100

go内置库函数实现client与server数据的发送接收

功能&#xff1a;客户端持续写入数据&#xff0c;直到输入exit退出&#xff0c;服务端读取数据并打印 注意&#xff1a;server和client目录在同一层级 服务端 server/main package mainimport ("fmt""net" )func main() {listen, err : net.Listen(&quo…

【牛客 NC253455】小红走排列 题解(链表+位集合+贪心算法)

题目描述 对于一个排列&#xff0c;小红定义该排列的总消耗为&#xff1a;1走到2&#xff0c;2走到3&#xff0c;……&#xff0c;最终从 n − 1 n-1 n−1走到 n n n所需的最少的总步数。其中&#xff0c;每一步可以向左走一步&#xff0c;也可以向右走一步。 现在&#xff0…

Kubernetes基础(二十一)-k8s的服务发现机制

1 概述 Kubernetes&#xff08;K8s&#xff09;是一个强大的容器编排平台&#xff0c;提供了丰富的功能来简化容器化应用的管理。其中之一重要的特性就是服务发现机制&#xff0c;它使得应用程序能够在K8s集群中动态地发现和访问其他服务。本文将深入研究K8s中的服务发现机制&…