Tarray/Tset/Map容器

175 阅读3分钟

Tarry:

image.png

//构建时,不允许构建为堆对象,只能构建为栈对象
TArray<FString>StringArray;
//使用初始化函数添加元素
StringArray.Init(TEXT("JIANGI"), 10);
//新语法 
for (FString FA : StringArray)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *FA);
}

image.png

//ADD添加元素到数组末尾,返回当前元素添加在数组的下标
INT32 Array1 = StringArray.Add(TEXT("CAIJIN"));
//Emplace函数,将元素添加到数组的末尾,返回下标
StringArray.AddUnique(TEXT("VR"));
//Append函数,可以复制普通数组到TArry中
//ARRAY_COUNT,是用来获取数组长度的
FString Data[4]{ TEXT("100") };
StringArray.Append(Data,ARRAY_COUNT(Data));
//Insert函数,插入
//插入元素,插入的位置不能超出容器的大小
//插入后,该位置原来元素,向后排列
//第一个参数:要插入的元素
//第二个元素,插入的数组下标位置
StringArray.Insert(TEXT("sudent"), 5);
//Num()获取TArray容器的元素的个数
for (int32 i = 0; i < StringArray.Num(); i++)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *StringArray[i]);
}

image.png

//SetNum函数,用来设置容器的大小
TArray<int32> IntArray;
IntArray.SetNum(20);
for (auto i : IntArray)
{
UE_LOG(LogTemp, Log, TEXT("%d"), i);//打印20个0
}

image.png

//迭代器 不允许修改元素个数,以及添加和移除。
TArray<FString>FSArray;
FSArray.Init(TEXT("xi"),10);
//CreatIterator()创建迭代器函数,可以通过迭代器修改元素
for (auto It = FSArray.CreateIterator(); It; ++It)
{
//修改FSArray元素
*It = FString(TEXT("HA"));
UE_LOG(LogTemp, Log, TEXT("%s"), **It);
}
//CreatConstIterator()创建迭代器函数,只能读取,不能修改容器大小,和移除元素
for (auto It = FSArray.CreateConstIterator(); It; ++It)
{
UE_LOG(LogTemp, Log, TEXT("%s"), **It);
}

image.png

FString* FSData = FSArray.GetData();

image.png

//查询函数
//1.IsValidInde(5)数组在该下标中的元素是否有效
//返回一个布尔值
FSArray.IsValidIndex(5);
//返回FSArray容器中的最后一个元素
FSArray.Last();
//返回数组倒数第三个元素
FSArray.Last(3);
//返回FSArray容器中第一个元素
FSArray.Top();
//Contains(),包含,返回布尔值
FSArray.Contains(TEXT("HA"));
//Find(),查询,返回该元素在数组中的下标,如果没有查到,返回-1
FSArray.Find(TEXT("HA"));
//查询给定的元素的所在位置,将位置索引设置到Index,返回布尔值
//既能返回布尔,也会返回元素所在位置
int32 Index = 0;
FSArray.Find(TEXT("HA"), Index);

image.png

 //移除函数
 //在容器中移除给定的元素,返回移除的元素个数
 int32 RemoveNum=FSArray.Remove(TEXT("HA"));
 //移除容器中找到的第一个给定元素
 //返回0则容器中没有这个元素
 //返回1则移除成功
 int32 RemoveIndex=FSArray.RemoveSingle(TEXT("HA"));
 //移除给定下标位置的元素
 FSArray.RemoveAt(3);
 //清空容器
 FSArray.Empty();

Map:

image.png

//构建TMap容器,键值类型为FString,元素类型为int32
TMap<FString, int32>Map;
//1.添加元素
//注意:添加Map容器中已有的键值,会覆盖之前对应的元素
Map.Add(TEXT("K1"), 111);
//添加元素的时候,只添加键值,会使用默认元素值
Map.Add(TEXT("K2"));
//可以用以下方法修改数据内容,但是不能添加
Map[(TEXT("K2"))] = 1234;

image.png

TMap<FString, int32>Map1;
Map1.Append(Map);

image.png

 //遍历操作
 for (auto Item : Map)
 {
 Item.Key;
 Item.Value;
 }
 //迭代器
 for(auto It=Map.CreateIterator(); It; It++)
 {
 //获得键值
 It.Key();
 It.Value() = 100;
 It->Value;
 }
 //禁止修改
 for (auto It = Map.CreateConstIterator(); It ; It++)
 {
 It.Key();
 //不能修改,It.Value() = 1100;Err;
 It->Value;
 }
 

image.png

//查询
//1.查询容器中元素的个数
Map.Num();
//检查是否包含给定的键值
Map.Contains(TEXT("HA"));
//返回键值对应的元素指针,如果没有找到内容,则返回空指针
Map.Find(TEXT("HA"));
 
 

image.png

Map.Remove(TEXT("K1"));
//清空容器
Map.Empty();

TSet

image.png

  //TSet
  TSet<FString>Set1;//普通变量
  Set1.Add(TEXT("JIANGXI"));//Add函数是用来添加元素的
  TSet<FString>Set2;
  Set2.Add(TEXT("CAIJIN"));
  Set1.Append(Set2);//Append函数,将Set2中的元素复制一份添加到Set1中
  
 

image.png

//遍历 
for (auto& Temp : Set1)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *Temp);
}
////普通迭代器
//for(auto it=Set1.CreateIterator();it;it++)
//{
//}
////只读迭代器
//for (auto it = Set1.CreateConstIterator(); it; it++)
//{
//}
 

image.png

//查询函数
Set1.Num();//获取容器元素数量
Set2.Contains(TEXT("VR"));//查询是否包含
Set1.Find(TEXT("VR"));//寻找,返回元素的指针
//将Tset容器转换为TArray容器
Set1.Array();
TArray<FString>Array1 = Set1.Array();
 

image.png

Set1.Remove(TEXT("VR"));//移除给定的内容,移除成功返回1 ,移除失败返回0
Set1.Empty();//清空容器,元素为0
Set1.Reset();//移除元素,但不释放空间
 

注:
image.png

image.png