TArray<AActor*> ActorArray =GetActorArrayFromSomewhere();// get length of the array
int32 ArraySize = ActorArray.Num();// get particular actor by index
int32 index =0;
AActor* FirstActor = ActorArray[index];//Append new actor
AActor* NewActor =GetNewActor();
ActorArray.Add(NewActor);//Append new UNIQUE Actor
ActorArray.AddUnique(NewActor);//remove actor
ActorArray.Remove(NewActor);//remove by index
ActorArray,RemoveAt(index);//more efficient removeAt, but DO NOT gurantee swap order
ActorArray.RemoveAtSwap(index);//empty array
ActorArray.Empty();
TArray 会自动对其元素进行垃圾回收,只要标记了反射
UCLASS()
class UMyClass : UObject
{GENERATED_BODY();// ...UPROPERTY()
TArray<AActor*> GarbageCollectedArray;};
voidRemvoeDeadEnemies(TSet<AEnemy*>& EnemySet){// from start of set, iterate to the endfor(auto EnemyIterator = EnemySet.CreateIterator(); EnemyIterator;++EnemyIterator){
AEnemy* Enemy =*EnemyIterator;if(Enemy.Health ==0){
EnemyIterator.RemoveCurrent();}}
常用操作
–EnemyIterator
EnemyIterator += Offset, EnemyIterator -= Offset
int32 index = EnemyIterator.GetIndex()
EnemyIterator.ReSet() //复位到第一个元素
For each,简化版Iterator,全部元素循环一次
TArray, TSet, TMap
//TArray
TArray<AActor*> ActorArray =GetArrayFromSomewhere();for(AActor* ActorArray :ActorArray){...}//TSet
TSet<AActor*> ActorSet =GetSetFromSomewhere();for(AActor* Actor :ActorSet){...}//TMap
TMap<FName, AActor*> NameToActorMap =GetMapFromSomewhere();for(auto& KVP : NameToActorMap){
FName Name = KVP.Key;
AActor* Actor = KVP.Value;...}