Appearance
TArray
虚幻里提供了三种容器:TArray, TMap, TSet。它们都是同质容器,也就是存储的数据类型只能是同类型的。
TArray是数组容器,无法被继承。
注意!不要使用new和delete在堆上进行创建销毁。也就是说,要把TArray构建成栈对象。这是因为容器是模板类,构建时必须指出存储数据类型。
创建和遍历
cpp
TArray<FString> sArray;
sArray.Init(TEXT("OK"), 5); // 初始化装填,向容器内加入5个元素,元素内容是OK
// 遍历法一
for(int32 i = 0;i<sArray.Num();i++)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *sArray[i]);
}
sArray[0] = TEXT("SS"); // 修改内容
// 遍历法二
for(auto& str:sArray)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *str);
}
添加元素
cpp
TArray<int32> numArray;
numArray.Init(0,1);
numArray.Add(2); // 把一个元素类型实例复制(或移动)到数组中
numArray.Emplace(3); // 添加元素到容器中。Add函数调用的是Emplace函数
numArray.AddUnique(4); // 加入唯一元素
TArray<TString> Array;
FString Data[3]{TEXT("ed"), TEXT("s"),TEXT("ss")};
// Append, 将两个数组拼接
Array.Append(Data, ARRAY_COUNT(Data)); // ARRAY_COUNT宏只能识别普通数组,不识别数组指针
// 插入元素
Array.Insert(TEXT("AAA"),0);
设置容器大小
cpp
Array.SetNum(15);
转成普通数组
cpp
FString* Data = Array.GetData();
一些查询函数
cpp
Array.IsValidIndex(5);
Array.Last(n); // n可写可不写。写了会限制查询的数量
Array.Top();
Array.Contains(TEXT("OK")); // 检查是否包含给定的元素,返回布尔值
Array.Find(TEXT("OK")); // 查找是否包含给定的元素并返回所在位置
int Index = 0;
Array.Find(TEXT("OK"), Index); // 查询给定元素所在的位置,将位置索引设置到Index,返回布尔值
一些移除函数
cpp
Array.Remove(TEXT("OK")); // 在容器中移除给定的元素,返回移除的个数
Array.RemoveSingle(TEXT("OK")); // 在容器中移除给定的元素,返回移除的个数,0失败,1成功
Array.RemoveAt(5); // 移除给定位置的元素
Array.Empty(); // 清空容器
Array.Reset(); // 清空容器但保留空间