1.
增加:
1.1
初始化
TArray<int32> IntArray;
IntArray.Init(10, 5);
// IntArray == [10,10,10,10,10]
1.2
增加新元素
TArray<FString> StrArr;
StrArr.Add(TEXT("World"));
或者:
StrArr.Emplace(TEXT("World"));
说明:
1.2.1
建议使用Add(),虽然官方说Emplace()能省一次构造临时FString,不过还是建议使用接口含义更简洁、明确的Add()。
1.2.2
AddUnique(),可以避免有效元素判断的代码,代码会更简洁。
1.2.3
不过我也觉得挺扯的:
其实我也不懂为什么Unreal不使用Add()这种名称更简洁、明确,并且功能更优的函数名称,代替Emplace()?
哪个大神能告诉下,Emplace()这个函数单独列出来,有什么含义吗?
所以建议使用Add()。
1.3
预留多元素位置
Reserve()
说明:
如果数组能预先知道元素数量,并且元素数量为大量(超过32个),并且单元素的体积比较大时,可以考虑使用Reserve()。
2.
删除:
2.1
通过索引删除
ValArr.RemoveAt(2)
2.2
删除最后的元素
StrArr.Pop();
2.3
删除第一个匹配元素
ValArr.RemoveSingle(30);
2.4
清空
SlackArray.Empty();
3.
修改:
3.1
直接访问
FString* StrPtr = StrArr.GetData();
StrPtr[0] == "!"
StrPtr[1] == "of"
4.
查询:
4.1
遍历
for (int32 Index = 0; Index != StrArr.Num(); ++Index)
{
JoinedStr += StrArr[Index];
JoinedStr += TEXT(" ");
}
4.2
排序
StrArr.Sort([](const FString& A, const FString& B) {
return A.Len() < B.Len();
});
4.3
查找(找不到返回INDEX_NONE)
int32 Index = StrArr.Find(TEXT("Hello"));
4.4
判断索引是否有效
bool bValid = StrArr.IsValidIndex(0);
4.5
得到最后一个元素
FString ElemEnd = StrArr.Last();
参考:
1.
《TArray:虚幻引擎中的数组》
https://docs.unrealengine.com/zh-CN/Programming/UnrealArchitecture/TArrays/index.html
2.
《UE4容器TArray、TMap的使用》
https://blog.csdn.net/yangxuan0261/article/details/52078303/
3.
《UE4[C++]TArray的快速优化》
https://zhuanlan.zhihu.com/p/72227908