TArray的使用

本文详细介绍了UE4中TArray的使用,包括基础操作如声明、迭代、排序、添加和删除元素,以及内存优化如Reserve和TInlineAllocator的运用。此外,还提到了在属性同步和性能优化方面的注意事项,如无序数组删除元素的高效方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TArray

TArray是UE4的数组,TArrray为模板类因此依据UE4的命名规则开头为TUE4中最常见的容器类,其结构是由相同类型的元素组成的序列。类似C++ STL中的vector。

基础用法

声明

TArray<int32> arrayID; TArray<FString> arrayStr;

判断越界

IsValidIndex(int nIndex);

迭代

//C++ range-for方式 for (FString& Str : StrArr) { }

排序

arrayID.Sort(); //arrayID按照降序排列 arrayID.Sort([](int a, const int b) { return a < b; });

增加元素

  1. Add : 把一个元素类型实例复制(或移动)到数组尾部,用于浅类型。

  2. Emplace : 用传入参数构造一个新的数组元素类型的实例,添加到数组尾部。效。率比Add更好。但代码易读性上Add更好。。

  3. Insert : 指定位置插入元素。

  4. Append : 在尾部拼接另外一个数组。

  5. AddUnique : 尾部添加一个新元素,若数组中已存在该元素则不会加入。

删除元素

  1. RemoveAt : 删除指定位置的元素,删除后保证数组顺序,被删元素后面的元素会往前移动。

  2. RemoveAtSwap : 功能同RemoveAt,但不保证删除后的顺序,用于无序数组,效率较高。

  3. Pop : 移除数组尾部的元素。

  4. Remove : 删除数组中所有与指定元素值相等的元素,返回删除个数。

  5. RemoveSingle : 删除数组中第一个与指定元素值相等的元素,返回删除个数。

  6. RemoveAll : 自定义条件,删除符合条件的所有元素。

  7. Empty : 清空数组,所有元素都会删除。

Tip:

当数组是无序的,必须用RemoveAtSwap删除指定位置的元素,相比RemoveAt效率更高。

只删一个元素时,必须用RemoveSingle性能优于Remove,效率更高。

修改

if(nArrayID.IsValidIndex(nIndex)) nArrayID[nIndex] = newValue;

查询数组长度

int32 Count = StrArr.Num();

查找指定元素,若未找到则返回INDEX_NONE值

int32 index = StrArr.Find(TEXT("target"));

Lambda表达式高级查找

TTest* pTest = arrayTest.FindByPredicate([nFindID](TTest test) {  return test.ID== nFindID; });

TArray预先分配内存

Reserve

如果预先知道数组的上限可以使用Reserve

TInlineAllocator

因为TArray是动态数组,所以我们可以使用TInlineAllocator。

 

我们可以把
TArray<AActor*> MyArray;
改为:
TArray<AActor*, TInlineAllocator<32>> MyAllocatedArray;
这样,我们就不用对前32个被添加到数组的元素进行任何动态分配,因为它们正好能填入作为TInlineAllocator一部分的栈的区域。在33个元素之后,所有元素都被移动到第二分配器存储。

 

写法上:

MyAllocatedArray的类型名显得有些长了,因此可以声明我们的数组类型。

使用typedef

 

typedef TArray<AActor*, TInlineAllocator<32>> AllocateArrayType;
AllocateArrayType MyArray;

//迭代
for (AllocateArrayType::TIterator Iter(MyArray); Iter; ++Iter)
{
	AActor* MyActor = *Iter;
	MyActor->YourFunction();
}

 

属性同步TArray时使用思考

有时如果只是需要更新TArray的其中一个元素,可以通过将TArray修改前的数据保存下来然后再比对修改后的数据进行对应的变更信息触发。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值