做農(nóng)資的網(wǎng)站網(wǎng)站流量統(tǒng)計(jì)工具有哪些
本篇日志將介紹FString,FText、FName的用法和相互轉(zhuǎn)換,以及容器TMap,TArray的增刪查改
一、字符串相關(guān)數(shù)據(jù)類型:FString、FText、FName
FString是最接近std::string的類型,字符串本身可以看做一個(gè)存儲(chǔ)char型的動(dòng)態(tài)數(shù)組,也可以使用'+'來(lái)進(jìn)行字符串連接
FName是不可修改的字符串類型,其會(huì)在定義時(shí)生成一個(gè)哈希值,適合作為TMap的鍵
FText最主要的功能是向玩家展示不同的語(yǔ)言包括中文,可以在DataTable中進(jìn)行設(shè)置
UPROPERTY(EditAnywhere,BlueprintReadWrite)
FString S1 = "a";
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FName S2 = "b";
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FText S3 = FText::FromString("c");//FText無(wú)法直接用字符串賦值
(三種字符串在藍(lán)圖中顯示的顏色是不同的)
三種數(shù)據(jù)類型是可以互相轉(zhuǎn)化的,這里我們統(tǒng)一使用FString作為跳板:
S1 = S3.ToString();//FText向FString轉(zhuǎn)化
S1 = S2.ToString();//FName向FString轉(zhuǎn)化
S2 = FName(S1);//FString向FName轉(zhuǎn)化
S3 = FText::FromString(S1);//FString向FText轉(zhuǎn)化
FString和std::string之間也是可以相互轉(zhuǎn)化的:
S4 = TCHAR_TO_UTF8(*S1);//FString向std::string轉(zhuǎn)化
S1 = UTF8_TO_TCHAR(S4.c_str());//std::string向FString轉(zhuǎn)化
二、容器:TArray,TMap
TArray是一種動(dòng)態(tài)數(shù)組,類似于std::array或std::vector,下面是其常用的增刪改查方法:
TArray<int>Array;
Array.Add(3);//添加一個(gè)元素到末尾
Array[0] = 5;//可以進(jìn)行隨機(jī)訪問(wèn)
auto x = Array.FindByPredicate([](const int& x) {return x > 3; });//返回找到的第一個(gè)符合條件的的值的指針,沒(méi)找到返回nullptr
UE_LOG(LogTemp, Warning, TEXT("%d"), *x);
Array.RemoveAt(0);//刪除某個(gè)索引值對(duì)應(yīng)的元素
TMap是一個(gè)哈希表,類似于std::unordered_map,其提供了針對(duì)例如FString的UE特殊數(shù)據(jù)類型的哈希函數(shù),使用方法如下:
TMap<FString, int>Map;
Map.Add("A", 1);//在哈希表中添加一個(gè)鍵值對(duì)
//Map["B"] = 2;//注意TMap不能像std::unordered_map一樣自動(dòng)創(chuàng)建一個(gè)"B",2的鍵值對(duì),而是會(huì)報(bào)錯(cuò)
if(Map.Contains("A"))
{UE_LOG(LogTemp, Warning, TEXT("warning:%d"), Map["A"]);//注意在用鍵求值是要先查詢是否存在Map["A"] = 2;
}
Map.Remove("A");//移除哈希表中對(duì)應(yīng)的元素
下一篇日志我將介紹UE中函數(shù)的聲明和定義